Issue #12483: ctypes: Fix a crash when the destruction of a callback

object triggers the garbage collector.
This commit is contained in:
Amaury Forgeot d'Arc 2011-09-12 21:03:36 +02:00
parent 1d7deafeea
commit bbe46d63ee
3 changed files with 12 additions and 0 deletions

View File

@ -134,6 +134,14 @@ class Callbacks(unittest.TestCase):
if isinstance(x, X)] if isinstance(x, X)]
self.assertEqual(len(live), 0) self.assertEqual(len(live), 0)
def test_issue12483(self):
import gc
class Nasty:
def __del__(self):
gc.collect()
CFUNCTYPE(None)(lambda x=Nasty(): None)
try: try:
WINFUNCTYPE WINFUNCTYPE
except NameError: except NameError:

View File

@ -65,6 +65,9 @@ Tests
Extension Modules Extension Modules
----------------- -----------------
- Issue #12483: ctypes: Fix a crash when the destruction of a callback
object triggers the garbage collector.
- Issue #12950: Fix passing file descriptors in multiprocessing, under - Issue #12950: Fix passing file descriptors in multiprocessing, under
OpenIndiana/Illumos. OpenIndiana/Illumos.

View File

@ -13,6 +13,7 @@ static void
CThunkObject_dealloc(PyObject *_self) CThunkObject_dealloc(PyObject *_self)
{ {
CThunkObject *self = (CThunkObject *)_self; CThunkObject *self = (CThunkObject *)_self;
PyObject_GC_UnTrack(self);
Py_XDECREF(self->converters); Py_XDECREF(self->converters);
Py_XDECREF(self->callable); Py_XDECREF(self->callable);
Py_XDECREF(self->restype); Py_XDECREF(self->restype);