[Python-checkins] bpo-1635741: Clean sysdict and builtins of interpreter at exit (GH-21605)
Hai Shi
webhook-mailer at python.org
Wed Aug 12 17:23:38 EDT 2020
https://github.com/python/cpython/commit/8ecc0c4d390d03de5cd2344aa44b69ed02ffe470
commit: 8ecc0c4d390d03de5cd2344aa44b69ed02ffe470
branch: master
author: Hai Shi <shihai1992 at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-08-12T23:23:30+02:00
summary:
bpo-1635741: Clean sysdict and builtins of interpreter at exit (GH-21605)
files:
M Python/pystate.c
diff --git a/Python/pystate.c b/Python/pystate.c
index d0cbf5cb8364b..f6d1956e9dce9 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -294,8 +294,6 @@ PyInterpreterState_Clear(PyInterpreterState *interp)
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);
@@ -308,6 +306,14 @@ PyInterpreterState_Clear(PyInterpreterState *interp)
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.
More information about the Python-checkins
mailing list