From 2cc906419fd8592c24a281a2c4b0932ad978be3d Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 12 Aug 2010 10:18:19 -0700 Subject: [PATCH] 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. --- debian/openvswitch-switch.init | 4 ++-- xenserver/etc_init.d_openvswitch | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) 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 } -- 2.45.2