aboutsummaryrefslogtreecommitdiff
path: root/utilities
diff options
context:
space:
mode:
authorGurucharan Shetty <gshetty@nicira.com>2013-03-27 14:15:05 -0700
committerGurucharan Shetty <gshetty@nicira.com>2013-03-27 15:52:27 -0700
commit780b1c693744517304a750845b24e4d17efb4736 (patch)
treefc610c1592f40c9db9af2aa50c9ef09e6a465715 /utilities
parent32664c36ab505b219baea847f5430b7a86f80d0a (diff)
ovs-lib: Wait for a longer time after SIGKILL.
Currently, when we stop a daemon, we first send it SIGTERM. If SIGTERM did not work within ~5 seconds, we send a SIGKILL. After sending SIGKILL, we wait only for 4 seconds, before giving up. If the system is extremely busy, there is a chance that a process is not killed by the kernel within 4 seconds. In such a case, when we try to start the daemon immediately, we see that the pid inside the pid-file is valid and assume that the daemon is still running. This leaves us in a state, where the daemon is actually not running. This patch increases the time waiting for the kernel to kill the process to 60 seconds. Bug #15404. Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'utilities')
-rw-r--r--utilities/ovs-lib.in11
1 files changed, 5 insertions, 6 deletions
diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
index d010abfe..a441c3d0 100644
--- a/utilities/ovs-lib.in
+++ b/utilities/ovs-lib.in
@@ -172,7 +172,10 @@ start_daemon () {
stop_daemon () {
if test -e "$rundir/$1.pid"; then
if pid=`cat "$rundir/$1.pid"`; then
- for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 1 FAIL; do
+ for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 2 10 15 30 FAIL; do
+ if pid_exists "$pid" >/dev/null 2>&1; then :; else
+ return 0
+ fi
case $action in
TERM)
action "Killing $1 ($pid)" kill $pid
@@ -185,11 +188,7 @@ stop_daemon () {
return 1
;;
*)
- if pid_exists $pid >/dev/null 2>&1; then
- sleep $action
- else
- return 0
- fi
+ sleep $action
;;
esac
done