diff --git a/include/poller.php b/include/poller.php index 53f855785..42bf58913 100644 --- a/include/poller.php +++ b/include/poller.php @@ -88,6 +88,7 @@ function poller_run($argv, $argc){ // If we got that queue entry we claim it for us if (!poller_claim_process($r[0])) { Lock::remove('poller_fetch_worker'); + usleep(rand(0, 200000)); continue; } else { // Fetch all workerqueue data while the table is still locked @@ -95,7 +96,6 @@ function poller_run($argv, $argc){ $entries = poller_total_entries(); $top_priority = poller_highest_priority(); $high_running = poller_process_with_priority_active($top_priority); - Lock::remove('poller_fetch_worker'); } // To avoid the quitting of multiple pollers only one poller at a time will execute the check @@ -616,10 +616,6 @@ function poller_worker_process() { // Check if we should pass some low priority process $highest_priority = 0; - if (!Lock::set('poller_fetch_worker')) { - return false; - } - if (poller_passing_slow($highest_priority)) { // Are there waiting processes with a higher priority than the currently highest? $r = q("SELECT * FROM `workerqueue` @@ -647,11 +643,6 @@ function poller_worker_process() { $r = q("SELECT * FROM `workerqueue` WHERE `executed` <= '%s' ORDER BY `priority`, `created` LIMIT 1", dbesc(NULL_DATE)); } - // We only unlock the tables here, when we got no data - if (!dbm::is_result($r)) { - Lock::remove('poller_fetch_worker'); - } - return $r; } diff --git a/src/Util/Lock.php b/src/Util/Lock.php index 6d7952ffa..36f408cf3 100644 --- a/src/Util/Lock.php +++ b/src/Util/Lock.php @@ -57,7 +57,6 @@ class Lock { $memcache = self::connectMemcache(); if (is_object($memcache)) { - $wait_sec = 0.2; $cachekey = get_app()->get_hostname().";lock:".$fn_name; do { @@ -82,15 +81,13 @@ class Lock { dba::unlock(); if (!$got_lock && ($timeout > 0)) { - usleep($wait_sec * 1000000); + usleep(rand(10000, 200000)); } } while (!$got_lock && ((time() - $start) < $timeout)); return $got_lock; } - $wait_sec = 2; - do { dba::lock('locks'); $lock = dba::select('locks', array('locked', 'pid'), array('name' => $fn_name), array('limit' => 1)); @@ -118,7 +115,7 @@ class Lock { dba::unlock(); if (!$got_lock && ($timeout > 0)) { - sleep($wait_sec); + usleep(rand(100000, 2000000)); } } while (!$got_lock && ((time() - $start) < $timeout));