[Zodb-checkins] CVS: Zope2/lib/python/ZODB - cPersistence.c:1.43

Jim Fulton jim@digicool.com
Wed, 28 Mar 2001 09:04:17 -0500 (EST)


Update of /cvs-repository/Zope2/lib/python/ZODB
In directory korak:/tmp/cvs-serv16979

Modified Files:
	cPersistence.c 
Log Message:
Undid a previous change, which broke all extensions that defined
persistent base classes (e.g. BTrees.)

Also added error checking for code that performs initialization of
some global string objects.



--- Updated File cPersistence.c in package Zope2/lib/python/ZODB --
--- cPersistence.c	2001/03/28 00:34:34	1.42
+++ cPersistence.c	2001/03/28 14:04:15	1.43
@@ -95,8 +95,6 @@
 #define UNLESS_ASSIGN(V,E) ASSIGN(V,E) UNLESS(V)
 #define OBJECT(V) ((PyObject*)(V))
 
-static cPersistenceCAPIstruct *cPersistenceCAPI;
-
 static PyObject *py_keys, *py_setstate, *py___dict__, *py_timeTime;
 static PyObject *py__p_changed, *py__p_deactivate;
 static PyObject *py___getattr__, *py___setattr__, *py___delattr__;
@@ -122,10 +120,10 @@
 }
 #endif
 
-static void
+static int
 init_strings(void)
 {
-#define INIT_STRING(S) py_ ## S = PyString_FromString(#S)
+#define INIT_STRING(S) if (! (py_ ## S = PyString_FromString(#S))) return -1;
   INIT_STRING(keys);
   INIT_STRING(setstate);
   INIT_STRING(timeTime);
@@ -136,6 +134,7 @@
   INIT_STRING(__setattr__);
   INIT_STRING(__delattr__);
 #undef INIT_STRING
+  return 0;
 }
 
 static PyObject *
@@ -756,10 +755,11 @@
       Py_DECREF(s);
   }
 
+  if (init_strings() < 0) return;
+
   m = Py_InitModule4("cPersistence", cP_methods, cPersistence_doc_string,
 		     (PyObject*)NULL, PYTHON_API_VERSION);
 
-  init_strings();
   
   d = PyModule_GetDict(m);
   PyDict_SetItemString(d,"__version__",