diff --git a/framework/Memcache/lib/Horde/Memcache.php b/framework/Memcache/lib/Horde/Memcache.php index 66a1cb38637..9047f1ae46f 100644 --- a/framework/Memcache/lib/Horde/Memcache.php +++ b/framework/Memcache/lib/Horde/Memcache.php @@ -430,7 +430,7 @@ public function lock($key) { $i = 0; - while ($this->_memcache->add($this->_key($key . self::LOCK_SUFFIX), 1, self::LOCK_TIMEOUT) === false) { + while ($this->_lockAdd($key) === false) { usleep(min(pow(2, $i++) * 10000, 100000)); } @@ -455,6 +455,24 @@ public function lock($key) $this->_locks[$key] = true; } + /** + * Small wrapper around Memcache[d]#add(). + * + * @param string $key The key to lock. + */ + protected function _lockAdd($key) + { + if ($this->_memcache instanceof Memcached) { + $this->_memcache->add( + $this->_key($key . self::LOCK_SUFFIX), 1, self::LOCK_TIMEOUT + ); + } else { + $this->_memcache->add( + $this->_key($key . self::LOCK_SUFFIX), 1, 0, self::LOCK_TIMEOUT + ); + } + } + /** * Release lock on a key. *