summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
Diffstat (limited to 'classes')
-rw-r--r--classes/Memcached_DataObject.php16
-rw-r--r--classes/Notice.php2
2 files changed, 17 insertions, 1 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;
diff --git a/classes/Notice.php b/classes/Notice.php
index 9f68c5255..fe3f3c017 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -1129,7 +1129,7 @@ class Notice extends Memcached_DataObject
$xs->element('id', null, $this->uri);
$xs->element('published', null, common_date_w3dtf($this->created));
- $xs->element('updated', null, common_date_w3dtf($this->modified));
+ $xs->element('updated', null, common_date_w3dtf($this->created));
if ($this->reply_to) {
$reply_notice = Notice::staticGet('id', $this->reply_to);