objectcache: make the BagOStuff::add() operation more atomic for WinCache
authorAaron Schulz <aschulz@wikimedia.org>
Tue, 12 Mar 2019 10:01:37 +0000 (03:01 -0700)
committerKrinkle <krinklemail@gmail.com>
Fri, 15 Mar 2019 00:38:18 +0000 (00:38 +0000)
Change-Id: I285ed9a7d0894adfe29b0bdc106b7518f655ba45

includes/libs/objectcache/WinCacheBagOStuff.php

index 6b0bec0..cae0280 100644 (file)
@@ -40,9 +40,13 @@ class WinCacheBagOStuff extends BagOStuff {
        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 === [] ) || $result;
+               return ( $result === [] || $result === true );
+       }
+
+       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+               $result = wincache_ucache_add( $key, serialize( $value ), $exptime );
+
+               return ( $result === [] || $result === true );
        }
 
        public function delete( $key, $flags = 0 ) {