diff options
author | Brion <brion@stormcloud.(none)> | 2009-12-22 15:08:44 -0800 |
---|---|---|
committer | Brion Vibber <brion@status.net> | 2009-12-22 16:24:01 -0800 |
commit | 38877a49224dca841d548f5d43c0143dafb19050 (patch) | |
tree | 613d28961d94f1f0a3585410a060a8a229093b42 | |
parent | 6aa4a555dc4424567eb230b66c2c1fb8b064de22 (diff) |
Skip DB_DataObject's in-process cache for static gets on CLI processes.
The local process cache would grow forever, keeping things stuck in memory and preventing GC.
-rw-r--r-- | classes/Memcached_DataObject.php | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 70e9e351d..af8e24090 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -37,6 +37,15 @@ class Memcached_DataObject extends DB_DataObject } } + /** + * Wrapper for DB_DataObject's static lookup using memcached + * as backing instead of an in-process cache array. + * + * @param string $cls classname of object type to load + * @param mixed $k key field name, or value for primary key + * @param mixed $v key field value, or leave out for primary key lookup + * @return mixed Memcached_DataObject subtype or false + */ function &staticGet($cls, $k, $v=null) { if (is_null($v)) { @@ -53,6 +62,13 @@ class Memcached_DataObject extends DB_DataObject } else { $i = DB_DataObject::staticGet($cls, $k, $v); if ($i) { + // DB_DataObject's in-process lookup cache interferes with GC + // to cause massive memory leaks in long-running processes. + if (php_sapi_name() == 'cli') { + $i->_clear_cache(); + } + + // Now store it into the shared memcached, if present... $i->encache(); } return $i; |