diff options
author | Armin Rigo <arigo@tunes.org> | 2015-06-06 20:56:11 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2015-06-06 20:56:11 +0200 |
commit | ddceebf582509d2cc6c2b5ceb4dfbd869ed45326 (patch) | |
tree | 7dc4b1ed45fcafc85bc74c44e80c70a2f514a9e8 /c/ffi_obj.c | |
parent | d18d940b9f378f818fc2182e40c74becb2bafd2c (diff) | |
download | cffi-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.c | 4 |
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); |