Commit 43090308 authored by Armin Rigo's avatar Armin Rigo

Issue #475

Fix a crash that can occur only if there is an error when building a callback
(in very rare cases), or in debug mode.
parent 831e391a969c
......@@ -6299,8 +6299,8 @@ static PyObject *b_callback(PyObject *self, PyObject *args)
cd->head.c_type = ct;
cd->head.c_data = (char *)closure_exec;
cd->head.c_weakreflist = NULL;
closure->user_data = NULL;
cd->closure = closure;
PyObject_GC_Track(cd);
cif_descr = (cif_description_t *)ct->ct_extra;
if (cif_descr == NULL) {
......@@ -6357,6 +6357,7 @@ static PyObject *b_callback(PyObject *self, PyObject *args)
"different from the 'ffi.h' file seen at compile-time)");
goto error;
}
PyObject_GC_Track(cd);
return (PyObject *)cd;
error:
......
......@@ -1470,7 +1470,7 @@ def test_a_lot_of_callbacks():
def make_callback(m):
def cb(n):
return n + m
return callback(BFunc, cb, 42) # 'cb' and 'BFunc' go out of scope
return callback(BFunc, cb, 42) # 'cb' goes out of scope
#
flist = [make_callback(i) for i in range(BIGNUM)]
for i, f in enumerate(flist):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment