]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Skip DB_DataObject's in-process cache for static gets on CLI processes.
authorBrion <brion@stormcloud.(none)>
Tue, 22 Dec 2009 23:08:44 +0000 (15:08 -0800)
committerBrion Vibber <brion@status.net>
Wed, 23 Dec 2009 00:24:01 +0000 (16:24 -0800)
The local process cache would grow forever, keeping things stuck in memory and preventing GC.

classes/Memcached_DataObject.php

index 70e9e351d5e8855f814d168b2505091f8b427bf1..af8e2409068c70db9d4b3e1e1dfce4c2da09e768 100644 (file)
@@ -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;