Py_CLEAR(interp->codec_error_registry);
Py_CLEAR(interp->modules);
Py_CLEAR(interp->modules_by_index);
- Py_CLEAR(interp->sysdict);
- Py_CLEAR(interp->builtins);
Py_CLEAR(interp->builtins_copy);
Py_CLEAR(interp->importlib);
Py_CLEAR(interp->import_func);
if (_PyRuntimeState_GetFinalizing(runtime) == NULL) {
_PyWarnings_Fini(interp);
}
+ /* We don't clear sysdict and builtins until the end of this function.
+ Because clearing other attributes can execute arbitrary Python code
+ which requires sysdict and builtins. */
+ PyDict_Clear(interp->sysdict);
+ PyDict_Clear(interp->builtins);
+ Py_CLEAR(interp->sysdict);
+ Py_CLEAR(interp->builtins);
+
// XXX Once we have one allocator per interpreter (i.e.
// per-interpreter GC) we must ensure that all of the interpreter's
// objects have been cleaned up at the point.