forked from GNUsocial/gnu-social
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:
parent
6aa4a555dc
commit
38877a4922
@ -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)
|
function &staticGet($cls, $k, $v=null)
|
||||||
{
|
{
|
||||||
if (is_null($v)) {
|
if (is_null($v)) {
|
||||||
@ -53,6 +62,13 @@ class Memcached_DataObject extends DB_DataObject
|
|||||||
} else {
|
} else {
|
||||||
$i = DB_DataObject::staticGet($cls, $k, $v);
|
$i = DB_DataObject::staticGet($cls, $k, $v);
|
||||||
if ($i) {
|
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();
|
$i->encache();
|
||||||
}
|
}
|
||||||
return $i;
|
return $i;
|
||||||
|
Loading…
Reference in New Issue
Block a user