Issue 31420: Reference leaks introduced by bpo-30860
Created on 2017-09-11 16:29 by vstinner, last changed 2022-04-11 14:58 by admin. This issue is now closed.
Messages (8)
msg301882 - (view)
Author: STINNER Victor (vstinner) *
Date: 2017-09-11 16:29
Date: 2017-09-11 16:30
Date: 2017-09-11 16:36
Date: 2017-09-11 17:14
Date: 2017-09-11 17:16
Date: 2017-09-11 21:21
Date: 2017-09-11 21:31
Date: 2017-09-14 07:36
Date: 2017-09-11 16:29
The following commands show memory leaks introduced by bpo-30860: $ ./python -m test -R 3:3 test_atexit -m test.test_atexit.SubinterpreterTest.test_callbacks_leak $ ./python -m test -R 3:3 test_atexit -m test.test_atexit.SubinterpreterTest.test_callbacks_leak_refcycle $ ./python -m test -R 3:3 test_threading -m test.test_threading.SubinterpThreadingTests.test_threads_join $ ./python -m test -R 3:3 test_capi -m test.test_capi.SubinterpreterTest.test_subinterpsmsg301883 - (view) Author: STINNER Victor (vstinner) *
Date: 2017-09-11 16:30
> The following commands show memory leaks introduced by bpo-30860: Oh, I'm talking about the commit 2ebc5ce42a8a9e047e790aefbf9a94811569b2b6.msg301886 - (view) Author: Stefan Krah (skrah) *
Date: 2017-09-11 16:36
Could be the same as #31408.msg301889 - (view) Author: STINNER Victor (vstinner) *
Date: 2017-09-11 17:14
The leak comes from the following lines of _PySys_EndInit():
---
PyObject *warnoptions = get_warnoptions();
if (warnoptions == NULL)
return -1;
SET_SYS_FROM_STRING_BORROW_INT_RESULT("warnoptions", warnoptions);
PyObject *xoptions = get_xoptions();
if (xoptions == NULL)
return -1;
SET_SYS_FROM_STRING_BORROW_INT_RESULT("_xoptions", xoptions);
---
It's not the first time that I have an issue with these attributes. The last reference weak caused by multiple interpreters was also related to this one if I recall correctly.
See bpo-30598 and my commit 865de27dd79571a4a5c7a7d22a07fb909c4a9f8e.
msg301891 - (view)
Author: STINNER Victor (vstinner) *
Date: 2017-09-11 17:16
Extract of my msg295399: "The problem is that warnoptions is stored in a C global variable *and* in sys.warnoptions of each interpreter. The ownership of this variable is unclear." Maybe we need a change similar to bpo-28411 (commit 86b7afdfeee77993fe896a2aa13b3f4f95973f16) which removed the "modules" field from Py_InterpreterState.msg301904 - (view) Author: Eric Snow (eric.snow) *
Date: 2017-09-11 21:21
I'm looking into this.msg301906 - (view) Author: Eric Snow (eric.snow) *
Date: 2017-09-11 21:31
Moving warnoptions (and xoptions) out of PyInterpreterState seems like a good idea to me for the same reasons as applied to sys.modules. The case for these two is even stronger since they are only used in sysmodule.c.msg302154 - (view) Author: Eric Snow (eric.snow) *
Date: 2017-09-14 07:36
New changeset dae0276bb6bc7281d59fb0b8f1aab31634ee80dc by Eric Snow in branch 'master': bpo-30860: Fix a refleak. (#3567) https://github.com/python/cpython/commit/dae0276bb6bc7281d59fb0b8f1aab31634ee80dc