* this data object when it's unset or goes out of scope.
* DB_DataObject doesn't do this yet by itself.
*/
+
function __destruct()
{
$this->free();
+ if (method_exists('DB_DataObject', '__destruct')) {
+ parent::__destruct();
+ }
}
+ /**
+ * 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)) {
} 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;
}
static function cacheKey($cls, $k, $v) {
+ if (is_object($cls) || is_object($j) || is_object($v)) {
+ $e = new Exception();
+ common_log(LOG_ERR, __METHOD__ . ' object in param: ' .
+ str_replace("\n", " ", $e->getTraceAsString()));
+ }
return common_cache_key(strtolower($cls).':'.$k.':'.$v);
}