summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ModuleNode.py
diff options
context:
space:
mode:
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r--Cython/Compiler/ModuleNode.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py
index b4d8b2306..99b4b4fe9 100644
--- a/Cython/Compiler/ModuleNode.py
+++ b/Cython/Compiler/ModuleNode.py
@@ -2010,23 +2010,28 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
for entry in rev_entries:
if entry.visibility != 'extern':
if entry.type.is_pyobject and entry.used:
- code.putln("Py_DECREF(%s); %s = 0;" % (
- code.entry_as_pyobject(entry), entry.cname))
+ code.put_decref_clear(entry.cname,
+ entry.type,
+ clear_before_decref=True,
+ nanny=False)
code.putln("__Pyx_CleanupGlobals();")
if Options.generate_cleanup_code >= 3:
code.putln("/*--- Type import cleanup code ---*/")
for type, _ in env.types_imported.items():
- code.putln("Py_DECREF((PyObject *)%s); %s = 0;" % (
- type.typeptr_cname, type.typeptr_cname))
+ code.put_decref_clear(type.typeptr_cname, type,
+ clear_before_decref=True,
+ nanny=False)
if Options.cache_builtins:
code.putln("/*--- Builtin cleanup code ---*/")
for entry in env.cached_builtins:
code.put_decref_clear(entry.cname,
PyrexTypes.py_object_type,
+ clear_before_decref=True,
nanny=False)
code.putln("/*--- Intern cleanup code ---*/")
code.put_decref_clear(Naming.empty_tuple,
PyrexTypes.py_object_type,
+ clear_before_decref=True,
nanny=False)
# for entry in env.pynum_entries:
# code.put_decref_clear(entry.cname,