Merge branch 'master_MDL-67485' of https://github.com/golenkovm/moodle
[moodle.git] / lib / cronlib.php
index 2ccbb3d..0adbcc9 100644 (file)
@@ -97,7 +97,10 @@ function cron_run_scheduled_tasks(int $timenow) {
 
     $scheduledlock = null;
     for ($run = 0; $run < $maxruns; $run++) {
-        if ($scheduledlock = $cronlockfactory->get_lock("scheduled_task_runner_{$run}", 1)) {
+        // If we can't get a lock instantly it means runner N is already running
+        // so fail as fast as possible and try N+1 so we don't limit the speed at
+        // which we bring new runners into the pool.
+        if ($scheduledlock = $cronlockfactory->get_lock("scheduled_task_runner_{$run}", 0)) {
             break;
         }
     }
@@ -144,7 +147,10 @@ function cron_run_adhoc_tasks(int $timenow, $keepalive = 0, $checklimits = true)
     if ($checklimits) {
         $adhoclock = null;
         for ($run = 0; $run < $maxruns; $run++) {
-            if ($adhoclock = $cronlockfactory->get_lock("adhoc_task_runner_{$run}", 1)) {
+            // If we can't get a lock instantly it means runner N is already running
+            // so fail as fast as possible and try N+1 so we don't limit the speed at
+            // which we bring new runners into the pool.
+            if ($adhoclock = $cronlockfactory->get_lock("adhoc_task_runner_{$run}", 0)) {
                 break;
             }
         }
@@ -173,7 +179,7 @@ function cron_run_adhoc_tasks(int $timenow, $keepalive = 0, $checklimits = true)
         }
 
         try {
-            $task = \core\task\manager::get_next_adhoc_task(time());
+            $task = \core\task\manager::get_next_adhoc_task(time(), $checklimits);
         } catch (Exception $e) {
             if ($adhoclock) {
                 // Release the adhoc task runner lock.