diff --git a/boot.php b/boot.php index fe1ee63e06..b93810d774 100644 --- a/boot.php +++ b/boot.php @@ -22,6 +22,7 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'a use Friendica\App; use Friendica\Core\Config; +use Friendica\Util\Lock; require_once 'include/config.php'; require_once 'include/network.php'; @@ -1100,8 +1101,16 @@ function proc_run($cmd) { return; } + // If there is a lock then we don't have to check for too much worker + if (!Lock::set('poller_worker', 0)) { + return; + } + // If there are already enough workers running, don't fork another one - if (poller_too_much_workers()) { + $quit = poller_too_much_workers(); + Lock::remove('poller_worker'); + + if ($quit) { return; } diff --git a/include/poller.php b/include/poller.php index 89b0a24dbc..04dcfa431a 100644 --- a/include/poller.php +++ b/include/poller.php @@ -47,13 +47,12 @@ function poller_run($argv, $argc){ // We now start the process. This is done after the load check since this could increase the load. $a->start_process(); - // At first we check the number of workers and quit if there are too much of them - // This is done at the top to avoid that too much code is executed without a need to do so, - // since the poller mostly quits here. - if (poller_too_much_workers()) { + // Kill stale processes every 5 minutes + $last_cleanup = Config::get('system', 'poller_last_cleaned', 0); + if (time() > ($last_cleanup + 300)) { + logger('CLEAN: '.time().' > '.($last_cleanup + 300).' - '.$last_cleanup); + Config::set('system', 'poller_last_cleaned', time()); poller_kill_stale_workers(); - logger('Pre check: Active worker limit reached, quitting.', LOGGER_DEBUG); - return; } // Do we have too few memory? diff --git a/include/pubsubpublish.php b/include/pubsubpublish.php index 3265fd1e16..580e3ffce1 100644 --- a/include/pubsubpublish.php +++ b/include/pubsubpublish.php @@ -19,7 +19,7 @@ function pubsubpublish_run(&$argv, &$argc){ foreach ($r as $rr) { logger("Publish feed to ".$rr["callback_url"], LOGGER_DEBUG); proc_run(array('priority' => PRIORITY_HIGH, 'created' => $a->queue['created'], 'dont_fork' => true), - 'include/pubsubpublish.php', $rr["id"]); + 'include/pubsubpublish.php', (int)$rr["id"]); } }