diff options
author | Gurucharan Shetty <gshetty@nicira.com> | 2013-03-27 14:15:05 -0700 |
---|---|---|
committer | Gurucharan Shetty <gshetty@nicira.com> | 2013-03-27 15:52:27 -0700 |
commit | 780b1c693744517304a750845b24e4d17efb4736 (patch) | |
tree | fc610c1592f40c9db9af2aa50c9ef09e6a465715 /utilities | |
parent | 32664c36ab505b219baea847f5430b7a86f80d0a (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.in | 11 |
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 |