Merge "Revert "Use display name in category page subheadings if provided""
[lhc/web/wiklou.git] / includes / libs / objectcache / WinCacheBagOStuff.php
index c480aa0..6996ce5 100644 (file)
  * @ingroup Cache
  */
 class WinCacheBagOStuff extends BagOStuff {
-       public function get( $key, &$casToken = null, $flags = 0 ) {
+       protected function doGet( $key, $flags = 0 ) {
+               $casToken = null;
+
+               return $this->getWithToken( $key, $casToken, $flags );
+       }
+
+       protected function getWithToken( $key, &$casToken, $flags = 0 ) {
                $val = wincache_ucache_get( $key );
 
                $casToken = $val;
@@ -40,12 +46,12 @@ class WinCacheBagOStuff extends BagOStuff {
                return $val;
        }
 
-       public function set( $key, $value, $expire = 0 ) {
+       public function set( $key, $value, $expire = 0, $flags = 0 ) {
                $result = wincache_ucache_set( $key, serialize( $value ), $expire );
 
                /* wincache_ucache_set returns an empty array on success if $value
                   was an array, bool otherwise */
-               return ( is_array( $result ) && $result === array() ) || $result;
+               return ( is_array( $result ) && $result === [] ) || $result;
        }
 
        protected function cas( $casToken, $key, $value, $exptime = 0 ) {
@@ -58,11 +64,14 @@ class WinCacheBagOStuff extends BagOStuff {
                return true;
        }
 
-       public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !is_callable( $callback ) ) {
-                       throw new Exception( "Got invalid callback." );
+       public function merge( $key, callable $callback, $exptime = 0, $attempts = 10, $flags = 0 ) {
+               if ( wincache_lock( $key ) ) { // optimize with FIFO lock
+                       $ok = $this->mergeViaLock( $key, $callback, $exptime, $attempts, $flags );
+                       wincache_unlock( $key );
+               } else {
+                       $ok = false;
                }
 
-               return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+               return $ok;
        }
 }