[Zodb-checkins] CVS: Zope3/lib/python/Persistence - cPersistence.c:1.19
Jeremy Hylton
jeremy@zope.com
Mon, 7 Oct 2002 19:27:08 -0400
Update of /cvs-repository/Zope3/lib/python/Persistence
In directory cvs.zope.org:/tmp/cvs-serv7411/Persistence
Modified Files:
cPersistence.c
Log Message:
Change implementation of _p_activate() method.
The new implementation only calls setstate() if the object is a
ghost. The old behavior of calling setstate() every time was bogus,
because the caller is almost always interested in making sure the
object is not a ghost, regardless of its current state.
=== Zope3/lib/python/Persistence/cPersistence.c 1.18 => 1.19 ===
--- Zope3/lib/python/Persistence/cPersistence.c:1.18 Mon Oct 7 10:46:22 2002
+++ Zope3/lib/python/Persistence/cPersistence.c Mon Oct 7 19:27:08 2002
@@ -217,6 +217,17 @@
return Py_None;
}
+/* Only activate an object if it is a ghost. */
+
+static PyObject *
+persist_activate(PyPersistObject *self)
+{
+ if (self->po_state == GHOST && self->po_dm)
+ return _PyPersist_Load((PyPersistBaseObject *)self);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
static PyObject *
persist_deactivate(PyPersistObject *self)
{
@@ -674,7 +685,7 @@
}
static PyMethodDef base_persist_methods[] = {
- {"_p_activate", (PyCFunction)_PyPersist_Load, METH_NOARGS, },
+ {"_p_activate", (PyCFunction)persist_activate, METH_NOARGS, },
{"_p_deactivate", (PyCFunction)persist_deactivate, METH_NOARGS, },
{"_p_setattr", (PyCFunction)persist_p_setattr, METH_VARARGS, },
{"_p_delattr", (PyCFunction)persist_p_delattr, METH_O, },
@@ -685,7 +696,7 @@
{"__reduce__", (PyCFunction)persist_reduce, METH_NOARGS, },
{"__getstate__", (PyCFunction)persist_getstate, METH_NOARGS, },
{"__setstate__", persist_setstate, METH_O, },
- {"_p_activate", (PyCFunction)_PyPersist_Load, METH_NOARGS, },
+ {"_p_activate", (PyCFunction)persist_activate, METH_NOARGS, },
{"_p_deactivate", (PyCFunction)persist_deactivate, METH_NOARGS, },
{"_p_setattr", (PyCFunction)persist_p_setattr, METH_VARARGS, },
{"_p_delattr", (PyCFunction)persist_p_delattr, METH_O, },