diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-10-15 15:44:46 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-10-15 15:44:46 (GMT) |
commit | 196b0925ca55bf22ffbb97733cff3e63d4fb6e18 (patch) | |
tree | c546b34790bc5d6b122a7213886579fbad62c1b7 /Objects/moduleobject.c | |
parent | 96e319e5ac93c7342ca3edd2322dad688199fac6 (diff) | |
download | cpython-196b0925ca55bf22ffbb97733cff3e63d4fb6e18.zip cpython-196b0925ca55bf22ffbb97733cff3e63d4fb6e18.tar.gz cpython-196b0925ca55bf22ffbb97733cff3e63d4fb6e18.tar.bz2 |
only clear a module's __dict__ if the module is the only one with a reference to it #7140
Diffstat (limited to 'Objects/moduleobject.c')
-rw-r--r-- | Objects/moduleobject.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index d1aa771..c9f00e9 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -175,7 +175,10 @@ module_dealloc(PyModuleObject *m) { PyObject_GC_UnTrack(m); if (m->md_dict != NULL) { - _PyModule_Clear((PyObject *)m); + /* If we are the only ones holding a reference, we can clear + the dictionary. */ + if (Py_REFCNT(m->md_dict) == 1) + _PyModule_Clear((PyObject *)m); Py_DECREF(m->md_dict); } Py_TYPE(m)->tp_free((PyObject *)m); |