[Zodb-checkins] SVN: ZODB/branches/jim-readCurrent/src/persistent/cPersistence. Added a C API for calling readCurrent.
Jim Fulton
jim at zope.com
Wed Sep 1 18:03:50 EDT 2010
Log message for revision 116114:
Added a C API for calling readCurrent.
(This is indirectly tested by the BTree tests.)
Changed:
U ZODB/branches/jim-readCurrent/src/persistent/cPersistence.c
U ZODB/branches/jim-readCurrent/src/persistent/cPersistence.h
-=-
Modified: ZODB/branches/jim-readCurrent/src/persistent/cPersistence.c
===================================================================
--- ZODB/branches/jim-readCurrent/src/persistent/cPersistence.c 2010-09-01 22:03:48 UTC (rev 116113)
+++ ZODB/branches/jim-readCurrent/src/persistent/cPersistence.c 2010-09-01 22:03:50 UTC (rev 116114)
@@ -223,6 +223,29 @@
return 0;
}
+static int
+readCurrent(cPersistentObject *self)
+{
+ if ((self->state == cPersistent_UPTODATE_STATE ||
+ self->state == cPersistent_STICKY_STATE)
+ && self->jar && self->oid)
+ {
+ static PyObject *s_readCurrent=NULL;
+ PyObject *r;
+
+ if (s_readCurrent == NULL)
+ s_readCurrent = PyString_InternFromString("readCurrent");
+
+ r = PyObject_CallMethodObjArgs(self->jar, s_readCurrent, self, NULL);
+ if (r == NULL)
+ return -1;
+
+ Py_DECREF(r);
+ }
+
+ return 0;
+}
+
static PyObject *
Per__p_deactivate(cPersistentObject *self)
{
@@ -1262,9 +1285,10 @@
accessed,
ghostify,
(intfunctionwithpythonarg)Per_setstate,
- NULL /* The percachedel slot is initialized in cPickleCache.c when
+ NULL, /* The percachedel slot is initialized in cPickleCache.c when
the module is loaded. It uses a function in a different
shared library. */
+ readCurrent
};
void
Modified: ZODB/branches/jim-readCurrent/src/persistent/cPersistence.h
===================================================================
--- ZODB/branches/jim-readCurrent/src/persistent/cPersistence.h 2010-09-01 22:03:48 UTC (rev 116113)
+++ ZODB/branches/jim-readCurrent/src/persistent/cPersistence.h 2010-09-01 22:03:50 UTC (rev 116114)
@@ -103,6 +103,7 @@
void (*ghostify)(cPersistentObject*);
int (*setstate)(PyObject*);
percachedelfunc percachedel;
+ int (*readCurrent)(cPersistentObject*);
} cPersistenceCAPIstruct;
#define cPersistenceType cPersistenceCAPI->pertype
@@ -119,6 +120,9 @@
#define PER_CHANGED(O) (cPersistenceCAPI->changed((cPersistentObject*)(O)))
+#define PER_READCURRENT(O, E) \
+ if (cPersistenceCAPI->readCurrent((cPersistentObject*)(O)) < 0) { E; }
+
#define PER_GHOSTIFY(O) (cPersistenceCAPI->ghostify((cPersistentObject*)(O)))
/* If the object is sticky, make it non-sticky, so that it can be ghostified.
More information about the Zodb-checkins
mailing list