Wait for daemons to die in init.d script "stop" commands.
authorBen Pfaff <blp@nicira.com>
Thu, 12 Aug 2010 17:18:19 +0000 (10:18 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 12 Aug 2010 18:15:20 +0000 (11:15 -0700)
Sometimes it takes a moment for the OVS daemons to die.  When that happens,
the "start" half of "openvswitch restart" can fail when ovsdb-tool
runs, because ovsdb-server will still have the lock on the database if it
has not exited yet.  So this commit just makes the "stop" half wait for
the daemons to really die.

Bug #3369.

debian/openvswitch-switch.init
xenserver/etc_init.d_openvswitch

index a5b6857ef5f2f267bfcd9379d72b5f2bdbec7f83..a933a21ae70a3a68a807779d0b62dc3a35992c71 100755 (executable)
@@ -273,13 +273,13 @@ case "$1" in
         ;;
     stop)
         echo -n "Stopping ovs-vswitchd: "
-        start-stop-daemon --stop --quiet --oknodo \
+        start-stop-daemon --stop --quiet --oknodo --retry 5 \
             --pidfile /var/run/openvswitch/ovs-vswitchd.pid \
             --exec $ovs_vswitchd
         echo "ovs-vswitchd."
 
         echo -n "Stopping ovsdb-server: "
-        start-stop-daemon --stop --quiet --oknodo \
+        start-stop-daemon --stop --quiet --oknodo --retry 5 \
             --pidfile /var/run/openvswitch/ovsdb-server.pid \
             --exec $ovsdb_server
         echo "ovsdb-server."
index 0988fcc444254213fa0d5680f18b086a7520c68f..c52864eb2da3eda2d76506a2d7ffaa4823fde60d 100755 (executable)
@@ -254,6 +254,13 @@ function stop_daemon {
     if test -f "$pidfile"; then
         local pid=$(cat "$pidfile")
         action "Killing `basename $BINARY` ($pid)" kill $pid
+        for delay in .1 .25 .65 1 1 1 1; do
+            if kill -0 $pid >/dev/null 2>&1; then
+                sleep $delay
+            else
+                break
+            fi
+        done
         rm -f "$pidfile"
     fi
 }