From 5f2dcffb608b2b121c5cf79ac93f9ee9571d810c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 30 Sep 2011 11:21:24 -0700 Subject: [PATCH] Disable Cache class's in-process cache on CLI runs; unsafe for long-running daemons. Should help with situations like IM daemons coming up with false negatives on user settings lookups. --- lib/cache.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/cache.php b/lib/cache.php index eb4eb66656..8f5987ce27 100644 --- a/lib/cache.php +++ b/lib/cache.php @@ -43,11 +43,23 @@ */ class Cache { - var $_items = array(); + /** + * @var array additional in-process cache for web requests; + * disabled on CLI, unsafe for long-running daemons + */ + var $_items = array(); + var $_inlineCache = true; static $_inst = null; const COMPRESSED = 1; + private function __constructor() { + // Potentially long-running daemons or maintenance scripts + // should not use an in-process cache as it becomes out of + // date. + $this->_inlineCache = (php_sapi_name() != 'cli'); + } + /** * Singleton constructor * @@ -166,7 +178,7 @@ class Cache common_perf_counter('Cache::get', $key); if (Event::handle('StartCacheGet', array(&$key, &$value))) { - if (array_key_exists($key, $this->_items)) { + if ($this->_inlineCache && array_key_exists($key, $this->_items)) { $value = unserialize($this->_items[$key]); } Event::handle('EndCacheGet', array($key, &$value)); @@ -193,7 +205,9 @@ class Cache if (Event::handle('StartCacheSet', array(&$key, &$value, &$flag, &$expiry, &$success))) { - $this->_items[$key] = serialize($value); + if ($this->_inlineCache) { + $this->_items[$key] = serialize($value); + } $success = true; @@ -244,7 +258,7 @@ class Cache common_perf_counter('Cache::delete', $key); if (Event::handle('StartCacheDelete', array(&$key, &$success))) { - if (array_key_exists($key, $this->_items)) { + if ($this->_inlineCache && array_key_exists($key, $this->_items)) { unset($this->_items[$key]); } $success = true; -- 2.39.2