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.
This commit is contained in:
Brion 2009-12-22 15:08:44 -08:00 committed by Brion Vibber
parent 6aa4a555dc
commit 38877a4922

View File

@ -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;