Fix broken wincache merge() implementation
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 15 Sep 2016 11:50:25 +0000 (04:50 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Thu, 15 Sep 2016 11:50:25 +0000 (04:50 -0700)
Bug: T145664
Change-Id: I2f841779108df281e24003c586775b71aa176909

includes/libs/objectcache/WinCacheBagOStuff.php

index 19cc66a..6996ce5 100644 (file)
@@ -65,6 +65,13 @@ class WinCacheBagOStuff extends BagOStuff {
        }
 
        public function merge( $key, callable $callback, $exptime = 0, $attempts = 10, $flags = 0 ) {
-               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+               if ( wincache_lock( $key ) ) { // optimize with FIFO lock
+                       $ok = $this->mergeViaLock( $key, $callback, $exptime, $attempts, $flags );
+                       wincache_unlock( $key );
+               } else {
+                       $ok = false;
+               }
+
+               return $ok;
        }
 }