diff options
author | PiBa-NL <PiBa.NL.dev@gmail.com> | 2018-09-20 23:49:29 +0200 |
---|---|---|
committer | jim-p <jimp@netgate.com> | 2018-10-22 13:35:16 -0400 |
commit | aa73335131ff6ccc95d624c04b2a9f6a8065ef2f (patch) | |
tree | 22c2477eb13e0a70bb8332d4084a6591f489fe58 /src/etc | |
parent | 8e823a9375e4d066dbf51e8a2c30b99867ae8432 (diff) | |
download | pfsense-aa73335131ff6ccc95d624c04b2a9f6a8065ef2f.zip pfsense-aa73335131ff6ccc95d624c04b2a9f6a8065ef2f.tar.gz |
gateway monitoring, wait for apinger to terminate or remove its pid file when restarting it.
(cherry picked from commit 66491555711182d9176f6292fd58397c65e4b2af)
Diffstat (limited to 'src/etc')
-rw-r--r-- | src/etc/inc/gwlb.inc | 2 | ||||
-rw-r--r-- | src/etc/inc/util.inc | 16 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/etc/inc/gwlb.inc b/src/etc/inc/gwlb.inc index 0d9444c..7c0a436 100644 --- a/src/etc/inc/gwlb.inc +++ b/src/etc/inc/gwlb.inc @@ -82,7 +82,7 @@ function stop_dpinger($gwname = '') { } if (isvalidpid($process['pidfile'])) { - killbypid($process['pidfile']); + killbypid($process['pidfile'], 3); } else { @unlink($process['pidfile']); } diff --git a/src/etc/inc/util.inc b/src/etc/inc/util.inc index 87c4722..cd33d59 100644 --- a/src/etc/inc/util.inc +++ b/src/etc/inc/util.inc @@ -28,8 +28,8 @@ define('VIP_CARP', 2); define('VIP_IPALIAS', 3); /* kill a process by pid file */ -function killbypid($pidfile) { - return sigkillbypid($pidfile, "TERM"); +function killbypid($pidfile, $waitfor = 0) { + return sigkillbypid($pidfile, "TERM", $waitfor); } function isvalidpid($pidfile) { @@ -52,12 +52,18 @@ function isvalidproc($proc) { return is_process_running($proc); } -/* sigkill a process by pid file */ +/* sigkill a process by pid file, and wait for it to terminate or remove the .pid file for $waitfor seconds */ /* return 1 for success and 0 for a failure */ -function sigkillbypid($pidfile, $sig) { +function sigkillbypid($pidfile, $sig, $waitfor = 0) { if (isvalidpid($pidfile)) { - return mwexec("/bin/pkill " . escapeshellarg("-{$sig}") . + $result = mwexec("/bin/pkill " . escapeshellarg("-{$sig}") . " -F {$pidfile}", true); + $waitcounter = $waitfor * 10; + while(isvalidpid($pidfile) && $waitcounter > 0) { + $waitcounter = $waitcounter - 1; + usleep(100000); + } + return $result; } return 0; |