diff --git a/lib/classes/lock/db_record_lock_factory.php b/lib/classes/lock/db_record_lock_factory.php index 3a6325c24de..dd2aa756774 100644 --- a/lib/classes/lock/db_record_lock_factory.php +++ b/lib/classes/lock/db_record_lock_factory.php @@ -146,7 +146,7 @@ class db_record_lock_factory implements lock_factory { $countparams = array('owner' => $token, 'resourcekey' => $resource); $result = $this->db->count_records('lock_db', $countparams); $locked = $result === 1; - if (!$locked) { + if (!$locked && $timeout > 0) { usleep(rand(10000, 250000)); // Sleep between 10 and 250 milliseconds. } // Try until the giveup time. diff --git a/lib/classes/lock/file_lock_factory.php b/lib/classes/lock/file_lock_factory.php index 5062de84a8f..dd20e9bc014 100644 --- a/lib/classes/lock/file_lock_factory.php +++ b/lib/classes/lock/file_lock_factory.php @@ -152,7 +152,7 @@ class file_lock_factory implements lock_factory { // Will block on windows. So sad. $wouldblock = false; $locked = flock($filehandle, LOCK_EX | LOCK_NB, $wouldblock); - if (!$locked && $wouldblock) { + if (!$locked && $wouldblock && $timeout > 0) { usleep(rand(10000, 250000)); // Sleep between 10 and 250 milliseconds. } // Try until the giveup time. diff --git a/lib/classes/lock/postgres_lock_factory.php b/lib/classes/lock/postgres_lock_factory.php index 5da94bc5084..87ae64b9e8c 100644 --- a/lib/classes/lock/postgres_lock_factory.php +++ b/lib/classes/lock/postgres_lock_factory.php @@ -188,7 +188,7 @@ class postgres_lock_factory implements lock_factory { do { $result = $this->db->get_record_sql('SELECT pg_try_advisory_lock(:locktype, :token) AS locked', $params); $locked = $result->locked === 't'; - if (!$locked) { + if (!$locked && $timeout > 0) { usleep(rand(10000, 250000)); // Sleep between 10 and 250 milliseconds. } // Try until the giveup time.