From 8be52424f5d2727fd53fc564a9e41ac29ba622ac Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Mon, 12 Jun 2017 09:44:46 +0000
Subject: [PATCH] Only check for stale processes every 5 minutes

---
 boot.php                  | 11 ++++++++++-
 include/poller.php        | 11 +++++------
 include/pubsubpublish.php |  2 +-
 3 files changed, 16 insertions(+), 8 deletions(-)

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"]);
 		}
 	}