[Zope3-checkins] CVS: Zope3/src/persistence - persistence.c:1.16
Jeremy Hylton
jeremy@zope.com
Wed, 7 May 2003 09:11:25 -0400
Update of /cvs-repository/Zope3/src/persistence
In directory cvs.zope.org:/tmp/cvs-serv14897
Modified Files:
persistence.c
Log Message:
Preserve _p_serial across __setstate__().
Fix test of class with __slots__ to include _p_serial in __slots__.
=== Zope3/src/persistence/persistence.c 1.15 => 1.16 ===
--- Zope3/src/persistence/persistence.c:1.15 Mon May 5 13:06:27 2003
+++ Zope3/src/persistence/persistence.c Wed May 7 09:10:53 2003
@@ -175,6 +175,8 @@
PyObject **pdict;
PyObject *dict;
PyObject *k, *v;
+ PyObject *serial = NULL;
+ static PyObject *_p_serial;
int pos = 0;
if (state == Py_None) {
@@ -189,8 +191,14 @@
if ((*pdict) == NULL)
return NULL;
}
- else
+ else {
+ if (!_p_serial) {
+ _p_serial = PyString_InternFromString("_p_serial");
+ }
+ serial = PyDict_GetItem(*pdict, _p_serial);
+ Py_XINCREF(serial);
PyDict_Clear(*pdict);
+ }
dict = *pdict;
if (!PyDict_Check(state)) {
@@ -206,6 +214,11 @@
}
if (PyDict_SetItem(dict, k, v) < 0)
return NULL;
+ }
+ if (serial) {
+ if (PyDict_SetItem(*pdict, _p_serial, serial) < 0)
+ return NULL;
+ Py_DECREF(serial);
}
Py_INCREF(Py_None);