Author: Armin Rigo <ar...@tunes.org>
Branch: cpyext-ext
Changeset: r82435:208a42ce0440
Date: 2016-02-23 13:59 +0100
http://bitbucket.org/pypy/pypy/changeset/208a42ce0440/

Log:    fix

diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -539,7 +539,13 @@
             PyObject_Free.api_func.get_wrapper(space))
     pto.c_tp_alloc = llhelper(PyType_GenericAlloc.api_func.functype,
             PyType_GenericAlloc.api_func.get_wrapper(space))
-    if pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE:
+    builder = space.fromcache(StaticObjectBuilder)
+    if ((pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE) != 0
+            and builder.cpyext_type_init is None):
+            # this ^^^ is not None only during startup of cpyext.  At that
+            # point we might get into troubles by doing make_ref() when
+            # things are not initialized yet.  So in this case, simply use
+            # str2charp() and "leak" the string.
         w_typename = space.getattr(w_type, space.wrap('__name__'))
         heaptype = rffi.cast(PyHeapTypeObject, pto)
         heaptype.c_ht_name = make_ref(space, w_typename)
@@ -554,7 +560,6 @@
     w_base = best_base(space, w_type.bases_w)
     pto.c_tp_base = rffi.cast(PyTypeObjectPtr, make_ref(space, w_base))
 
-    builder = space.fromcache(StaticObjectBuilder)
     if builder.cpyext_type_init is not None:
         builder.cpyext_type_init.append((pto, w_type))
     else:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to