mirror of https://github.com/python/cpython
Plug a leak in timemodule. The module dictionary is saved during
initialization. If the interpreter is shut down and reinitialized (embedded CPython), the old module dictionary was not dec-refed during the next import of the time extension module. Contributed by Torsten Marek of Google.
This commit is contained in:
parent
28c88f48f9
commit
14b04cd350
|
@ -620,6 +620,9 @@ Library
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Fix the leak of a dict in the time module when used in an embedded
|
||||||
|
interpreter that is repeatedly initialized and shutdown and reinitialized.
|
||||||
|
|
||||||
- Issue #16012: Fix a regression in pyexpat. The parser's UseForeignDTD()
|
- Issue #16012: Fix a regression in pyexpat. The parser's UseForeignDTD()
|
||||||
method doesn't require an argument again.
|
method doesn't require an argument again.
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ static int floatsleep(double);
|
||||||
static double floattime(void);
|
static double floattime(void);
|
||||||
|
|
||||||
/* For Y2K check */
|
/* For Y2K check */
|
||||||
static PyObject *moddict;
|
static PyObject *moddict = NULL;
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
time_time(PyObject *self, PyObject *unused)
|
time_time(PyObject *self, PyObject *unused)
|
||||||
|
@ -941,6 +941,11 @@ PyInit_time(void)
|
||||||
/* Accept 2-digit dates unless PYTHONY2K is set and non-empty */
|
/* Accept 2-digit dates unless PYTHONY2K is set and non-empty */
|
||||||
p = Py_GETENV("PYTHONY2K");
|
p = Py_GETENV("PYTHONY2K");
|
||||||
PyModule_AddIntConstant(m, "accept2dyear", (long) (!p || !*p));
|
PyModule_AddIntConstant(m, "accept2dyear", (long) (!p || !*p));
|
||||||
|
/* If an embedded interpreter is shutdown and reinitialized the old
|
||||||
|
moddict was not decrefed on shutdown and the next import of this
|
||||||
|
module leads to a leak. Conditionally decref here to prevent that.
|
||||||
|
*/
|
||||||
|
Py_XDECREF(moddict);
|
||||||
/* Squirrel away the module's dictionary for the y2k check */
|
/* Squirrel away the module's dictionary for the y2k check */
|
||||||
moddict = PyModule_GetDict(m);
|
moddict = PyModule_GetDict(m);
|
||||||
Py_INCREF(moddict);
|
Py_INCREF(moddict);
|
||||||
|
|
Loading…
Reference in New Issue