Commit fd6380ab authored by Stefan Behnel's avatar Stefan Behnel

fix crashes when deallocating instances of cimported types after module...

fix crashes when deallocating instances of cimported types after module cleanup, patch by Lisandro Dalcin
parent 673f1210
...@@ -1111,7 +1111,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -1111,7 +1111,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
if base_type: if base_type:
tp_dealloc = TypeSlots.get_base_slot_function(scope, tp_slot) tp_dealloc = TypeSlots.get_base_slot_function(scope, tp_slot)
if tp_dealloc is None: if tp_dealloc is None:
tp_dealloc = "%s->tp_dealloc" % base_type.typeptr_cname # This is an externally defined type. Calling through the
# cimported base type pointer directly interacts badly with
# the module cleanup, which may already have cleared it.
# Instead, play safe by going through Py_TYPE() again.
tp_dealloc = "Py_TYPE(o)->tp_base->tp_dealloc"
code.putln( code.putln(
"%s(o);" % tp_dealloc) "%s(o);" % tp_dealloc)
else: else:
......
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