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-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2cc906419fd8592c24a281a2c4b0932ad978be3d;p=openvswitch 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 a5b6857e..a933a21a 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 0988fcc4..c52864eb 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 }