diff --git a/lib/classes/task/Scheduler.class.php b/lib/classes/task/Scheduler.class.php index 03d85ca820..49b58fda29 100755 --- a/lib/classes/task/Scheduler.class.php +++ b/lib/classes/task/Scheduler.class.php @@ -33,6 +33,7 @@ class task_Scheduler public function __construct(Logger $logger) { + declare(ticks = 1); $this->logger = $logger; } @@ -52,6 +53,14 @@ class task_Scheduler * @throws Exception if scheduler is already running * @todo doc all possible exception */ + public function sigHandler($signal) + { + $status = null; + $pid = pcntl_wait($status); + $exitstatus = pcntl_wexitstatus ( $status ); + $this->log(sprintf("sigchild %s received from pid=%s, status=%s, exitstatus=%s\n", $signal, $pid, var_export($status, true), $exitstatus)); + } + public function run() { @@ -73,7 +82,10 @@ class task_Scheduler if (\task_manager::isPosixPcntlSupported()) { // avoid php when a task ends - pcntl_signal(SIGCHLD, SIG_IGN); + // pcntl_signal(SIGCHLD, SIG_IGN); // no zombies but no returnValue + // pcntl_signal(SIGCHLD, SIG_DFL); // with "declare(ticks=1)" returnValue ok but zombies + pcntl_signal(SIGCHLD, array($this, 'sigHandler')); // ok + $this->method = self::METHOD_FORK; } diff --git a/lib/classes/task/period/archive.class.php b/lib/classes/task/period/archive.class.php index 398a209903..b41914a6e0 100755 --- a/lib/classes/task/period/archive.class.php +++ b/lib/classes/task/period/archive.class.php @@ -145,7 +145,7 @@ class task_period_archive extends task_abstract public function xml2graphic($xml, $form) { // XML should always be valid here... - if (($sxml = simplexml_load_string($xml)) != false) { + if ( ($sxml = simplexml_load_string($xml)) ) { // sanitize values if ((int) ($sxml->period) < 10) { $sxml->period = 10; @@ -298,7 +298,7 @@ class task_period_archive extends task_abstract $this->period = 60; $this->cold = 30; - if (($this->sxBasePrefs = simplexml_load_string($collection->get_prefs())) != false) { + if ( ($this->sxBasePrefs = simplexml_load_string($collection->get_prefs())) ) { $this->sxBasePrefs["id"] = $base_id; $this->period = (int) ($this->sxTaskSettings->period); @@ -397,7 +397,7 @@ class task_period_archive extends task_abstract $this->setLastExecTime(); try { - if ( ! ($this->sxTaskSettings = @simplexml_load_string($this->getSettings()))) { + if ( !($this->sxTaskSettings = @simplexml_load_string($this->getSettings())) ) { throw new Exception(sprintf('Error fetching or reading settings of the task \'%d\'', $this->getID())); } else { // copy settings to task, so it's easier to get later @@ -609,10 +609,10 @@ class task_period_archive extends task_abstract if ($this->movedFiles) { // something happened : a least one file has moved - return self::STATE_MAXRECSDONE; + return 'MAXRECSDONE'; } elseif (memory_get_usage() >> 20 > 25) { - return self::STATE_MAXMEGSREACHED; + return 'MAXMEGSREACHED'; } else { return 'NORECSTODO'; @@ -693,7 +693,7 @@ class task_period_archive extends task_abstract try { $listFolder = new CListFolder($path); - if (($sxDotPhrasea = @simplexml_load_file($path . '/.phrasea.xml')) != false) { + if ( ($sxDotPhrasea = @simplexml_load_file($path . '/.phrasea.xml')) ) { // test for magic file if (($magicfile = trim((string) ($sxDotPhrasea->magicfile))) != '') { @@ -800,7 +800,7 @@ class task_period_archive extends task_abstract $xp = new DOMXPath($dom); - if (($sxDotPhrasea = @simplexml_load_file($path . '/.phrasea.xml')) != false) { + if ( ($sxDotPhrasea = @simplexml_load_file($path . '/.phrasea.xml')) ) { // test magicfile if (($magicfile = trim((string) ($sxDotPhrasea->magicfile))) != '') {