summaryrefslogtreecommitdiff
path: root/c/ffi_obj.c
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2015-06-06 20:56:11 +0200
committerArmin Rigo <arigo@tunes.org>2015-06-06 20:56:11 +0200
commitddceebf582509d2cc6c2b5ceb4dfbd869ed45326 (patch)
tree7dc4b1ed45fcafc85bc74c44e80c70a2f514a9e8 /c/ffi_obj.c
parentd18d940b9f378f818fc2182e40c74becb2bafd2c (diff)
downloadcffi-ddceebf582509d2cc6c2b5ceb4dfbd869ed45326.tar.gz
Fix the logic to handle ffi.gc(x) being called several times with equal
values of x. (PyPy 2.6.0's RPython version is already correct, which I guess is why the problem was noticed.)
Diffstat (limited to 'c/ffi_obj.c')
-rw-r--r--c/ffi_obj.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/c/ffi_obj.c b/c/ffi_obj.c
index 911b654..80d0cfa 100644
--- a/c/ffi_obj.c
+++ b/c/ffi_obj.c
@@ -23,7 +23,7 @@
struct FFIObject_s {
PyObject_HEAD
- PyObject *gc_wrefs;
+ PyObject *gc_wrefs, *gc_wrefs_freelist;
struct _cffi_parse_info_s info;
char ctx_is_static, ctx_is_nonempty;
builder_c_t types_builder;
@@ -51,6 +51,7 @@ static FFIObject *ffi_internal_new(PyTypeObject *ffitype,
return NULL;
}
ffi->gc_wrefs = NULL;
+ ffi->gc_wrefs_freelist = NULL;
ffi->info.ctx = &ffi->types_builder.ctx;
ffi->info.output = internal_output;
ffi->info.output_size = FFI_COMPLEXITY_OUTPUT;
@@ -63,6 +64,7 @@ static void ffi_dealloc(FFIObject *ffi)
{
PyObject_GC_UnTrack(ffi);
Py_XDECREF(ffi->gc_wrefs);
+ Py_XDECREF(ffi->gc_wrefs_freelist);
free_builder_c(&ffi->types_builder, ffi->ctx_is_static);