diff options
author | Evan Prodromou <evan@status.net> | 2009-12-23 10:31:27 -0800 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2009-12-23 10:31:27 -0800 |
commit | 3262930ed46936140244c5385e4b172632d2dd44 (patch) | |
tree | b70e2718491ffb44205bfdd5f5adf0f07376001a /classes/Memcached_DataObject.php | |
parent | 6b5a334c0e0b40cbf3ed0bfd372e171eabf30f5f (diff) | |
parent | eab6d1c95450cf9b209a0961ac325f2f9ce87d80 (diff) |
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
Diffstat (limited to 'classes/Memcached_DataObject.php')
-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 d8b0db5a6..be8137573 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; |