From: Ben Pfaff Date: Thu, 12 Aug 2010 17:18:19 +0000 (-0700) Subject: Wait for daemons to die in init.d script "stop" commands. X-Git-Tag: v1.1.0pre1~97 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=2cc906419fd8592c24a281a2c4b0932ad978be3d;p=sliver-openvswitch.git Wait for daemons to die in init.d script "stop" commands. 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. --- diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init index a5b6857ef..a933a21ae 100755 --- a/debian/openvswitch-switch.init +++ b/debian/openvswitch-switch.init @@ -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." diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch index 0988fcc44..c52864eb2 100755 --- a/xenserver/etc_init.d_openvswitch +++ b/xenserver/etc_init.d_openvswitch @@ -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 }