summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-01-04 15:11:04 -1000
committerEvan Prodromou <evan@status.net>2010-01-04 15:11:04 -1000
commit31585453fc7c7ed2d4b9c72ef0478e541b5622e4 (patch)
tree04d4ba4f3c77eab0196b2fb62cd7b55959a517f0 /classes
parent31b62bf7817366174fcfefba585f8fa462b1b024 (diff)
parent78214c4e067616828478d600d500b34b6fcb9061 (diff)
Merge branch 'master' of git@gitorious.org:statusnet/mainline
Diffstat (limited to 'classes')
-rw-r--r--classes/Memcached_DataObject.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index b43cb0b56..ca360d411 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -23,6 +23,65 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Memcached_DataObject extends DB_DataObject
{
+ /**
+ * Destructor to free global memory resources associated with
+ * 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();
+ }
+ }
+
+ /**
+ * Magic function called at serialize() time.
+ *
+ * We use this to drop a couple process-specific references
+ * from DB_DataObject which can cause trouble in future
+ * processes.
+ *
+ * @return array of variable names to include in serialization.
+ */
+ function __sleep()
+ {
+ $vars = array_keys(get_object_vars($this));
+ $skip = array('_DB_resultid', '_link_loaded');
+ return array_diff($vars, $skip);
+ }
+
+ /**
+ * Magic function called at unserialize() time.
+ *
+ * Clean out some process-specific variables which might
+ * be floating around from a previous process's cached
+ * objects.
+ *
+ * Old cached objects may still have them.
+ */
+ function __wakeup()
+ {
+ // Refers to global state info from a previous process.
+ // Clear this out so we don't accidentally break global
+ // state in *this* process.
+ $this->_DB_resultid = null;
+
+ // We don't have any local DBO refs, so clear these out.
+ $this->_link_loaded = false;
+ }
+
+ /**
+ * 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)) {