From: Timo Tijhof Date: Thu, 15 Feb 2018 22:30:26 +0000 (-0800) Subject: Use `lock(,,0)` instead of `lockIsFree && lock(,,1)` for non-blocking locks X-Git-Tag: 1.31.0-rc.0~596 X-Git-Url: https://git.cyclocoop.org/%28%28?a=commitdiff_plain;ds=sidebyside;h=d6cc261cb271824d21b01588b393d2ab1b1c1f52;p=lhc%2Fweb%2Fwiklou.git Use `lock(,,0)` instead of `lockIsFree && lock(,,1)` for non-blocking locks This pattern is already used elsewhere and seems like a more efficient way to acquire locks in a non-blocking way. Change-Id: Idb369e7cb03b793d5f8295e956fecd8d1f849e17 --- diff --git a/includes/deferred/SiteStatsUpdate.php b/includes/deferred/SiteStatsUpdate.php index ad1f172460..2f882b830e 100644 --- a/includes/deferred/SiteStatsUpdate.php +++ b/includes/deferred/SiteStatsUpdate.php @@ -101,9 +101,7 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate { $pd = []; if ( $config->get( 'SiteStatsAsyncFactor' ) ) { // Lock the table so we don't have double DB/memcached updates - if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) - || !$dbw->lock( $lockKey, __METHOD__, 1 ) // 1 sec timeout - ) { + if ( !$dbw->lock( $lockKey, __METHOD__, 0 ) ) { $this->doUpdatePendingDeltas(); return; diff --git a/includes/jobqueue/jobs/RecentChangesUpdateJob.php b/includes/jobqueue/jobs/RecentChangesUpdateJob.php index a92ae96074..d97e4f9ad3 100644 --- a/includes/jobqueue/jobs/RecentChangesUpdateJob.php +++ b/includes/jobqueue/jobs/RecentChangesUpdateJob.php @@ -76,10 +76,9 @@ class RecentChangesUpdateJob extends Job { $lockKey = wfWikiID() . ':recentchanges-prune'; $dbw = wfGetDB( DB_MASTER ); - if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) - || !$dbw->lock( $lockKey, __METHOD__, 1 ) - ) { - return; // already in progress + if ( !$dbw->lock( $lockKey, __METHOD__, 0 ) ) { + // already in progress + return; } $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); @@ -138,7 +137,7 @@ class RecentChangesUpdateJob extends Job { $dbw->setSessionOptions( [ 'connTimeout' => 900 ] ); $lockKey = wfWikiID() . '-activeusers'; - if ( !$dbw->lockIsFree( $lockKey, __METHOD__ ) || !$dbw->lock( $lockKey, __METHOD__, 1 ) ) { + if ( !$dbw->lock( $lockKey, __METHOD__, 0 ) ) { // Exclusive update (avoids duplicate entries)… it's usually fine to just drop out here, // if the Job is already running. return;