diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2017-09-11 17:59:22 -0700 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-09-11 17:59:22 -0700 |
commit | 8728018624f257c7cfe44014742ae46134047f49 (patch) | |
tree | d3465549106d04472cb05f70b317f20dd7fc77f6 /Python/pylifecycle.c | |
parent | ba6d5d1defd7a281c8c8804e4b4cfd7370886236 (diff) | |
download | cpython-git-8728018624f257c7cfe44014742ae46134047f49.tar.gz |
bpo-30860: Fix a refleak. (#3506)
* Drop warnoptions from PyInterpreterState.
* Drop xoptions from PyInterpreterState.
* Don't set warnoptions and _xoptions again.
* Decref after adding to sys.__dict__.
* Drop an unused macro.
* Check sys.xoptions *before* we delete it.
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r-- | Python/pylifecycle.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index caa324e3af..3265d70181 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1006,6 +1006,11 @@ Py_FinalizeEx(void) while (_PyGC_CollectIfEnabled() > 0) /* nothing */; #endif + +#ifdef Py_REF_DEBUG + PyObject *showrefcount = _PyDebug_XOptionShowRefCount(); +#endif + /* Destroy all modules */ PyImport_Cleanup(); @@ -1053,7 +1058,10 @@ Py_FinalizeEx(void) /* dump hash stats */ _PyHash_Fini(); - _PY_DEBUG_PRINT_TOTAL_REFS(); +#ifdef Py_REF_DEBUG + if (showrefcount == Py_True) + _PyDebug_PrintTotalRefs(); +#endif #ifdef Py_TRACE_REFS /* Display all objects still alive -- this can invoke arbitrary |