diff --git a/admin/tool/task/cli/schedule_task.php b/admin/tool/task/cli/schedule_task.php index 62b0ad984cc..e87dd5ddc4b 100644 --- a/admin/tool/task/cli/schedule_task.php +++ b/admin/tool/task/cli/schedule_task.php @@ -104,25 +104,29 @@ if ($execute = $options['execute']) { $predbqueries = $DB->perf_get_queries(); $pretime = microtime(true); + + mtrace("Scheduled task: " . $task->get_name()); + // NOTE: it would be tricky to move this code to \core\task\manager class, + // because we want to do detailed error reporting. + $cronlockfactory = \core\lock\lock_config::get_lock_factory('cron'); + if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) { + mtrace('Cannot obtain cron lock'); + exit(129); + } + if (!$lock = $cronlockfactory->get_lock('\\' . get_class($task), 10)) { + $cronlock->release(); + mtrace('Cannot obtain task lock'); + exit(130); + } + + $task->set_lock($lock); + if (!$task->is_blocking()) { + $cronlock->release(); + } else { + $task->set_cron_lock($cronlock); + } + try { - mtrace("Scheduled task: " . $task->get_name()); - // NOTE: it would be tricky to move this code to \core\task\manager class, - // because we want to do detailed error reporting. - $cronlockfactory = \core\lock\lock_config::get_lock_factory('cron'); - if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) { - mtrace('Cannot obtain cron lock'); - exit(129); - } - if (!$lock = $cronlockfactory->get_lock('\\' . get_class($task), 10)) { - mtrace('Cannot obtain task lock'); - exit(130); - } - $task->set_lock($lock); - if (!$task->is_blocking()) { - $cronlock->release(); - } else { - $task->set_cron_lock($cronlock); - } get_mailer('buffer'); $task->execute(); if (isset($predbqueries)) { diff --git a/lib/classes/lock/db_record_lock_factory.php b/lib/classes/lock/db_record_lock_factory.php index 70cbdb2e6b0..032af9f7406 100644 --- a/lib/classes/lock/db_record_lock_factory.php +++ b/lib/classes/lock/db_record_lock_factory.php @@ -248,7 +248,7 @@ class db_record_lock_factory implements lock_factory { // Called from the shutdown handler. Must release all open locks. foreach ($this->openlocks as $key => $unused) { $lock = new lock($key, $this); - $this->release_lock($lock); + $lock->release(); } } } diff --git a/lib/classes/lock/postgres_lock_factory.php b/lib/classes/lock/postgres_lock_factory.php index f27d532081d..5da94bc5084 100644 --- a/lib/classes/lock/postgres_lock_factory.php +++ b/lib/classes/lock/postgres_lock_factory.php @@ -236,7 +236,7 @@ class postgres_lock_factory implements lock_factory { // Called from the shutdown handler. Must release all open locks. foreach ($this->openlocks as $key => $unused) { $lock = new lock($key, $this); - $this->release_lock($lock); + $lock->release(); } }