Merge "Omit RC_EXTERNAL edits from UDP feed"
[lhc/web/wiklou.git] / includes / objectcache / WinCacheBagOStuff.php
index 637647b..6d9b47a 100644 (file)
@@ -32,12 +32,15 @@ class WinCacheBagOStuff extends BagOStuff {
        /**
         * Get a value from the WinCache object cache
         *
-        * @param $key String: cache key
+        * @param string $key cache key
+        * @param $casToken[optional] int: cas token
         * @return mixed
         */
-       public function get( $key ) {
+       public function get( $key, &$casToken = null ) {
                $val = wincache_ucache_get( $key );
 
+               $casToken = $val;
+
                if ( is_string( $val ) ) {
                        $val = unserialize( $val );
                }
@@ -48,9 +51,9 @@ class WinCacheBagOStuff extends BagOStuff {
        /**
         * Store a value in the WinCache object cache
         *
-        * @param $key String: cache key
+        * @param string $key cache key
         * @param $value Mixed: object to store
-        * @param $expire Int: expiration time
+        * @param int $expire expiration time
         * @return bool
         */
        public function set( $key, $value, $expire = 0 ) {
@@ -61,11 +64,24 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === array() ) || $result;
        }
 
+       /**
+        * Store a value in the WinCache object cache, race condition-safe
+        *
+        * @param int $casToken cas token
+        * @param string $key cache key
+        * @param int $value object to store
+        * @param int $exptime expiration time
+        * @return bool
+        */
+       public function cas( $casToken, $key, $value, $exptime = 0 ) {
+               return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
+       }
+
        /**
         * Remove a value from the WinCache object cache
         *
-        * @param $key String: cache key
-        * @param $time Int: not used in this implementation
+        * @param string $key cache key
+        * @param int $time not used in this implementation
         * @return bool
         */
        public function delete( $key, $time = 0 ) {