[Python-checkins] bpo-38858: Fix ref leak in pycore_interp_init() (GH-17512)
Victor Stinner
webhook-mailer at python.org
Sun Dec 8 15:56:05 EST 2019
https://github.com/python/cpython/commit/080ee5a88406fb68aaab741145cd5d2a7c5f2ad6
commit: 080ee5a88406fb68aaab741145cd5d2a7c5f2ad6
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2019-12-08T21:55:58+01:00
summary:
bpo-38858: Fix ref leak in pycore_interp_init() (GH-17512)
bpo-38858, bpo-38997: _PySys_Create() returns a strong reference to
the sys module: Py_DECREF() is needed when we are done with the
module.
files:
M Python/pylifecycle.c
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 8bd71a350de86..823d96e86a438 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -705,24 +705,29 @@ static PyStatus
pycore_interp_init(PyThreadState *tstate)
{
PyStatus status;
+ PyObject *sysmod = NULL;
status = pycore_init_types(tstate);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto done;
}
- PyObject *sysmod;
status = _PySys_Create(tstate, &sysmod);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto done;
}
status = pycore_init_builtins(tstate);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto done;
}
- return pycore_init_import_warnings(tstate, sysmod);
+ status = pycore_init_import_warnings(tstate, sysmod);
+
+done:
+ /* sys.modules['sys'] contains a strong reference to the module */
+ Py_XDECREF(sysmod);
+ return status;
}
More information about the Python-checkins
mailing list