diff options
author | Brion Vibber <brion@pobox.com> | 2010-03-10 11:54:00 -0800 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-03-10 11:54:00 -0800 |
commit | 532e486a936c78961ff93d5e8de2dc0b86ee8d2a (patch) | |
tree | ce7dce785643e76df6f9a65d96b1c2ffb95ecf57 /scripts/queuedaemon.php | |
parent | 55e8473a7a87ebe85bcfa5cfb409ce9a9aeafdd0 (diff) |
Detect when queuedaemon/xmppdaemon parent processes die and kill the child processes.
Keeps stray daemon subprocesses from floating around when we kill the parents via a signal!
Accomplished by opening a bidirectional pipe in the parent process; the children close out the writer end and keep the reader in their open sockets list. When the parent dies, the children see that the socket's been closed out and can perform an orderly shutdown.
Diffstat (limited to 'scripts/queuedaemon.php')
-rwxr-xr-x | scripts/queuedaemon.php | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php index 6dba16f95..582a3dd88 100755 --- a/scripts/queuedaemon.php +++ b/scripts/queuedaemon.php @@ -105,7 +105,7 @@ class QueueDaemon extends SpawningDaemon { $this->log(LOG_INFO, 'checking for queued notices'); - $master = new QueueMaster($this->get_id()); + $master = new QueueMaster($this->get_id(), $this->processManager()); $master->init($this->allsites); try { $master->service(); @@ -125,6 +125,14 @@ class QueueDaemon extends SpawningDaemon class QueueMaster extends IoMaster { + protected $processManager; + + function __construct($id, $processManager) + { + parent::__construct($id); + $this->processManager = $processManager; + } + /** * Initialize IoManagers which are appropriate to this instance. */ @@ -135,6 +143,7 @@ class QueueMaster extends IoMaster $qm = QueueManager::get(); $qm->setActiveGroup('main'); $managers[] = $qm; + $managers[] = $this->processManager; } Event::handle('EndQueueDaemonIoManagers', array(&$managers)); |