summaryrefslogtreecommitdiff
path: root/classes/Memcached_DataObject.php
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2009-12-23 10:31:27 -0800
committerEvan Prodromou <evan@status.net>2009-12-23 10:31:27 -0800
commit3262930ed46936140244c5385e4b172632d2dd44 (patch)
treeb70e2718491ffb44205bfdd5f5adf0f07376001a /classes/Memcached_DataObject.php
parent6b5a334c0e0b40cbf3ed0bfd372e171eabf30f5f (diff)
parenteab6d1c95450cf9b209a0961ac325f2f9ce87d80 (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.php16
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;