diff --git a/update_daemon2.php b/update_daemon2.php index 7e06cf9a9..326b69e49 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) {