From 5a613536c7859f108da8d1e58de2ca0189a80efb Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 24 Jan 2008 09:46:09 +0100 Subject: [PATCH] update_daemon2: check for dead children before spawning --- update_daemon2.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/update_daemon2.php b/update_daemon2.php index 7e06cf9a..326b69e4 100644 --- a/update_daemon2.php +++ b/update_daemon2.php @@ -42,11 +42,7 @@ $last_checkpoint = -1; - function sigalrm_handler() { - die("received SIGALRM, hang in feed update?\n"); - } - - function sigchld_handler($signal) { + function reap_children() { global $children; $tmp = array(); @@ -61,9 +57,18 @@ $children = $tmp; - $running_jobs = count($children); + return count($tmp); + } + + function sigalrm_handler() { + die("received SIGALRM, hang in feed update?\n"); + } + + function sigchld_handler($signal) { + $running_jobs = reap_children(); _debug("[SIGCHLD] jobs left: $running_jobs"); + pcntl_waitpid(-1, $status, WNOHANG); } @@ -123,6 +128,8 @@ if ($last_checkpoint + SPAWN_INTERVAL < time()) { + reap_children(); + for ($j = count($children); $j < MAX_JOBS; $j++) { $pid = pcntl_fork(); if ($pid == -1) {