only clear a module's __dict__ if the module is the only one with a reference to it #7140
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 @@
{
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);