Commit 38877a49 authored by Brion's avatar Brion Committed by Brion Vibber

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.
parent 6aa4a555
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment