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.
;;
stop)
echo -n "Stopping ovs-vswitchd: "
;;
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: "
--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."
--pidfile /var/run/openvswitch/ovsdb-server.pid \
--exec $ovsdb_server
echo "ovsdb-server."
if test -f "$pidfile"; then
local pid=$(cat "$pidfile")
action "Killing `basename $BINARY` ($pid)" kill $pid
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