Hello,

  I read the code involved for stopping flumotion and basically it is a
matter of retrieving the pid's from the /var/run/flumotion/*.pid files
and terminating/waiting/killing the processes. I propose a fix that does
it without calling the python code. Hope this will be usefull.

Cheers.

-- 
Giovanni
--- flumotion.rtupdate_old	2010-04-16 23:29:25.000000000 +0200
+++ flumotion.rtupdate	2010-04-16 23:59:15.000000000 +0200
@@ -6,6 +6,9 @@
 DESC="Flumotion Streaming Server"
 NAME="flumotion"
 SCRIPTNAME="/etc/init.d/$NAME"
+TERMWAIT=20
+KILLWAIT=10
+RUNDIR="/var/run"
 
 # Read configuration variable file if it is present
 [ -r "/etc/default/$NAME" ] && . "/etc/default/$NAME"
@@ -29,13 +32,22 @@
 case "$action" in
   pre-rtupdate)
     [ "$VERBOSE" != no ] && log_warning_msg "Stopping $DESC during Python runtime change..."
-    if [ -x "$SCRIPTNAME" ]; then
-        if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
-            invoke-rc.d "$NAME" stop
-        else
-            "$SCRIPTNAME" stop
-        fi
-    fi
+    for pidfile in $RUNDIR/$NAME/*.pid; do
+        [ "$pidfile" = "$RUNDIR/$NAME/*.pid" ] && exit 0
+        pid=`head -n 1 "$pidfile"`
+        counter=0
+        while (kill -0 $pid 1>/dev/null 2>&1); do
+            [ $counter -eq 0 ] && kill -TERM $pid
+            [ $counter -eq $TERMWAIT ] && kill -KILL $pid
+            if [ $counter -eq $(($TERMWAIT+$KILLWAIT)) ]; then
+                #FIXME: not sure about what to do here
+                log_failure_msg "Could not kill process with pid $pid"
+                exit 1
+            fi
+            counter=$(($counter+1))
+            sleep 1
+        done
+    done
   ;;
   post-rtupdate)
     [ "$VERBOSE" != no ] && log_warning_msg "Restarting $DESC after Python runtime change..."

Reply via email to