This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2022年01月17日 17:19 by vstinner, last changed 2022年04月11日 14:59 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| cannot_deallocate.patch | vstinner, 2022年01月22日 19:05 | |||
| cannot_deallocate2.patch | vstinner, 2022年01月22日 23:34 | |||
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 30645 | merged | vstinner, 2022年01月17日 17:32 | |
| PR 30732 | merged | vstinner, 2022年01月21日 00:49 | |
| PR 30733 | merged | vstinner, 2022年01月21日 01:19 | |
| PR 30734 | merged | vstinner, 2022年01月21日 01:23 | |
| PR 30735 | merged | vstinner, 2022年01月21日 01:55 | |
| PR 30736 | merged | vstinner, 2022年01月21日 01:58 | |
| PR 30743 | merged | vstinner, 2022年01月21日 11:13 | |
| PR 30744 | merged | vstinner, 2022年01月21日 11:26 | |
| PR 30749 | merged | vstinner, 2022年01月21日 13:58 | |
| PR 30750 | merged | vstinner, 2022年01月21日 14:47 | |
| PR 30760 | merged | vstinner, 2022年01月21日 19:53 | |
| PR 30761 | merged | vstinner, 2022年01月21日 20:10 | |
| PR 30763 | closed | vstinner, 2022年01月21日 21:08 | |
| PR 30764 | merged | vstinner, 2022年01月21日 21:21 | |
| PR 30769 | merged | vstinner, 2022年01月21日 21:35 | |
| PR 30767 | closed | vstinner, 2022年01月21日 21:36 | |
| PR 30775 | closed | vstinner, 2022年01月22日 01:19 | |
| PR 30788 | merged | vstinner, 2022年01月22日 13:42 | |
| PR 30789 | merged | miss-islington, 2022年01月22日 14:08 | |
| PR 30790 | merged | miss-islington, 2022年01月22日 14:08 | |
| PR 30791 | closed | vstinner, 2022年01月22日 14:13 | |
| PR 30793 | merged | vstinner, 2022年01月22日 15:16 | |
| PR 30795 | merged | vstinner, 2022年01月22日 17:12 | |
| PR 30796 | merged | vstinner, 2022年01月22日 17:24 | |
| PR 30798 | merged | vstinner, 2022年01月22日 18:01 | |
| PR 30804 | merged | vstinner, 2022年01月22日 20:21 | |
| PR 30805 | merged | vstinner, 2022年01月22日 21:05 | |
| PR 30806 | merged | vstinner, 2022年01月22日 21:35 | |
| PR 30807 | merged | vstinner, 2022年01月22日 22:05 | |
| PR 30809 | merged | vstinner, 2022年01月22日 22:25 | |
| PR 30810 | merged | vstinner, 2022年01月22日 22:33 | |
| PR 30815 | merged | vstinner, 2022年01月23日 00:56 | |
| PR 30964 | merged | vstinner, 2022年01月27日 17:55 | |
| PR 30988 | merged | vstinner, 2022年01月28日 12:48 | |
| Messages (50) | |||
|---|---|---|---|
| msg410808 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月17日 17:19 | |
Converting static types to heap types is a work-in-progress: * bpo-40077: "Convert static types to heap types: use PyType_FromSpec()" * At December 29, 2020, 43% (89/206) of types are declared as heap types on a total of 206 types. For comparison, in Python 3.8, only 9% (15/172) of types were declared as heap types: 74 types have been converted in the meanwhile. * https://vstinner.github.io/isolate-subinterpreters.html Static types are still causing issues with Py_Initialize() / Py_Finalize() is called multiple times in the same process, which is a supported use case for embedded Python. See bpo-45691 "Partial moving of core objects to interpreter state is incorrect at best, unsafe at worse" for a recent example with sys.float_info where sys.float_info.n_unnamed_fields holds a reference to a Python object. In june 2020, I wrote GH-20763 to clear static types at exit. But I abandoned my attempt because of bugs. Copy of my https://bugs.python.org/issue1635741#msg371119 message: """ I wrote PR 20763 to "finalize" static types in Py_Finalize(). It mostly works, but "./Programs/_testembed test_forced_io_encoding" crash. This program calls Py_Initialize() and Py_Finalize() multiple times in a loop. It doesn't look to be safe to clear static types. Many functions rely on the fact that static types are "always there" and are never finalized. Also, only a few static types are cleared by my PR: many static types are left unchanged. For example, static types of the _io module. It seems like a safer approach is to continue the work on bpo-40077: "Convert static types to PyType_FromSpec()". """ I propose a "best effort" approach: only clear a static type if it is no longer used. For example, check its reference count and its __subclasses__() method. |
|||
| msg410858 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2022年01月18日 12:57 | |
If we have static types, that means there is a mechanism to share some objects across interpreters. And if that's the case, why can't small ints (like sys.float_info.n_unnamed_fields) be static & shared as well? |
|||
| msg410866 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月18日 13:58 | |
> If we have static types, that means there is a mechanism to share some objects across interpreters. Sharing objects between interpreters is bad and is causing complex bugs. See a recent example of an object traveling from one interpreter to another and then causing a random crash on Windows related to the garbage collector: * https://bugs.python.org/issue46070 * https://github.com/python/cpython/pull/30577#pullrequestreview-852106207 > And if that's the case, why can't small ints (like sys.float_info.n_unnamed_fields) be static & shared as well? I would prefer to discuss that in other issues like bpo-40255 or bpo-39511, and focus this issue on fixing the static types implementation when Python is embedded in an application. -- Hum, this issue is not really related to sub-interpreters. My proposed PR only changes Py_Finalize(): the main interpreter. |
|||
| msg411025 - (view) | Author: Petr Viktorin (petr.viktorin) * (Python committer) | Date: 2022年01月20日 13:18 | |
> Sharing objects between interpreters is bad That's your opinion, I don't necessarily share it. > and is causing complex bugs. But converting static things (types, small ints) to heap is also causing bugs :( ---- Anyway, for this issue: is there a way to test if the types are correctly reinitialized if there are multiple finalize/init cycles? I worry about introducing more unexpected issues here. |
|||
| msg411033 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月20日 16:13 | |
If tomorrow static types are shared between sub-interpreters, it doesn't solve this problem: we still need to release memory allocated by Py_Initialize() in Py_Finalize() when Python is embedded. This issue is a sub-set of the big bpo-1635741 which explains the rationale. Again, this issue is not about sub-interpreters. > Anyway, for this issue: is there a way to test if the types are correctly reinitialized if there are multiple finalize/init cycles? I worry about introducing more unexpected issues here. I wasn't sure how to test it. But well, Dong-hee and you asked for tests, so I added tests for my PR ;-) |
|||
| msg411049 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月20日 22:17 | |
I checked with Valgrind the affect of PR 30645. main branch: ==330902== LEAK SUMMARY: ==330902== possibly lost: 29,128 bytes in 494 blocks ==330902== still reachable: 353,615 bytes in 3,577 blocks With the PR: ==332161== LEAK SUMMARY: ==332161== possibly lost: 24,456 bytes in 417 blocks ==332161== still reachable: 337,223 bytes in 3,423 blocks It frees 21,064 bytes (20 kB) in Py_Finalize(). |
|||
| msg411063 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 00:38 | |
Another measure using the command: PYTHONHASHSEED=0 ./python -X showrefcount -c pass I had to run the command 20 times to get a stable value, I don't know why. main branch: [21981 refs, 5716 blocks] PR: [21887 refs, 5667 blocks] => the PR removes 94 references and 49 memory blocks. |
|||
| msg411064 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 00:42 | |
New changeset e9e3eab0b868c7d0b48e472705024240d5c39d5c by Victor Stinner in branch 'main': bpo-46417: Finalize structseq types at exit (GH-30645) https://github.com/python/cpython/commit/e9e3eab0b868c7d0b48e472705024240d5c39d5c |
|||
| msg411066 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 01:12 | |
New changeset 6415e2ee4955b1a995c1e75544e2506b03780c3d by Victor Stinner in branch 'main': bpo-46417: _testembed.c avoids Py_SetProgramName() (GH-30732) https://github.com/python/cpython/commit/6415e2ee4955b1a995c1e75544e2506b03780c3d |
|||
| msg411070 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 01:51 | |
New changeset f389b37fb1cebe7ed66331cdd373a014695261f6 by Victor Stinner in branch 'main': bpo-46417: _thread uses PyStructSequence_NewType() (GH-30733) https://github.com/python/cpython/commit/f389b37fb1cebe7ed66331cdd373a014695261f6 |
|||
| msg411071 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 01:52 | |
New changeset 17f268a4ae6190b2659c89c6f32ad2d006e0e3c8 by Victor Stinner in branch 'main': bpo-46417: time module uses PyStructSequence_NewType() (GH-30734) https://github.com/python/cpython/commit/17f268a4ae6190b2659c89c6f32ad2d006e0e3c8 |
|||
| msg411073 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 02:30 | |
New changeset 1781d55eb34f94029e50970232635fc5082378cb by Victor Stinner in branch 'main': bpo-46417: _curses uses PyStructSequence_NewType() (GH-30736) https://github.com/python/cpython/commit/1781d55eb34f94029e50970232635fc5082378cb |
|||
| msg411076 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 03:02 | |
See also bpo-46449 "Deep-freezed modules create inconsistency in sys.gettotalrefcount() (_Py_Reftotal)". |
|||
| msg411077 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 03:02 | |
New changeset d013b241352e902389f955f8f99d75f16c124ee2 by Victor Stinner in branch 'main': bpo-46417: signal uses PyStructSequence_NewType() (GH-30735) https://github.com/python/cpython/commit/d013b241352e902389f955f8f99d75f16c124ee2 |
|||
| msg411117 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 12:05 | |
New changeset ea38e436fe1e585fb8c1f0badf5482f525b7f9ff by Victor Stinner in branch 'main': bpo-46417: Call _PyDebug_PrintTotalRefs() later (GH-30744) https://github.com/python/cpython/commit/ea38e436fe1e585fb8c1f0badf5482f525b7f9ff |
|||
| msg411118 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 12:06 | |
New changeset 595225e86dcc6ea520a584839925a878dce7a9b2 by Victor Stinner in branch 'main': bpo-46417: Py_Finalize() clears static types (GH-30743) https://github.com/python/cpython/commit/595225e86dcc6ea520a584839925a878dce7a9b2 |
|||
| msg411122 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 12:44 | |
> bpo-46417: Py_Finalize() clears static types (GH-30743) Oh, test_unittest crashed on s390x Debian 3.x: https://buildbot.python.org/all/#/builders/49/builds/1789 I fail to see the relationship between my change and this crash. I don't expect test_unittest to call Py_Finalize() and then Py_Initialize() again. --- 0:01:32 load avg: 4.77 [152/432/1] test_unittest crashed (Exit code -11) -- running: test_peg_generator (48.3 sec) Fatal Python error: Segmentation fault Current thread 0x000003ff89cf8720 (most recent call first): File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 2179 in _signature_fromstr File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 2273 in _signature_from_builtin File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 2461 in _signature_from_callable File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 2465 in _signature_from_callable File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 2966 in from_callable File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/inspect.py", line 3218 in signature File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/mock.py", line 112 in _get_signature_object File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/mock.py", line 505 in _mock_add_spec File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/mock.py", line 487 in mock_add_spec File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/test/testmock/testmock.py", line 1767 in test_mock_add_spec File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/unittest/case.py", line 547 in _callTestMethod (...) File "/home/dje/cpython-buildarea/3.x.edelsohn-debian-z/build/Lib/test/regrtest.py", line 47 in <module> File "<frozen runpy>", line 88 in _run_code File "<frozen runpy>", line 198 in _run_module_as_main Extension modules: _testcapi (total: 1) --- |
|||
| msg411127 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 13:27 | |
Maybe the problem is that I changed the order in which types are initialized in _PyTypes_InitTypes()? So far, test_unittest crashed on 4 buildbot workers: * s390x Debian 3.x: ./configure --prefix '$(PWD)/target' --with-pydebug https://buildbot.python.org/all/#/builders/49/builds/1789 * aarch64 Fedora Stable 3.x: ../configure --prefix '$(PWD)/target' --with-pydebug --with-platlibdir=lib64 --enable-ipv6 --enable-shared --with-computed-gotos=yes --with-dbmliborder=gdbm:ndbm:bdb --enable-loadable-sqlite-extensions --with-ssl-default-suites=openssl --without-static-libpython --with-lto https://buildbot.python.org/all/#/builders/125/builds/1263 * aarch64 RHEL8 3.x: ../configure --prefix '$(PWD)/target' --with-pydebug --with-platlibdir=lib64 --enable-ipv6 --enable-shared --with-computed-gotos=yes --with-dbmliborder=gdbm:ndbm:bdb --enable-loadable-sqlite-extensions --with-ssl-default-suites=openssl --without-static-libpython --with-lto https://buildbot.python.org/all/#/builders/529/builds/1357 * PPC64LE RHEL8 3.x: ../configure --prefix '$(PWD)/target' --with-pydebug --with-platlibdir=lib64 --enable-ipv6 --enable-shared --with-computed-gotos=yes --with-dbmliborder=gdbm:ndbm:bdb --enable-loadable-sqlite-extensions --with-ssl-default-suites=openssl --without-static-libpython --with-lto https://buildbot.python.org/all/#/builders/559/builds/1196 |
|||
| msg411139 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 15:45 | |
New changeset fda88864980ffce57add0ea03fb9cbda2798975e by Victor Stinner in branch 'main': bpo-46417: Revert remove_subclass() change (GH-30750) https://github.com/python/cpython/commit/fda88864980ffce57add0ea03fb9cbda2798975e |
|||
| msg411143 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 16:31 | |
> bpo-46417: Revert remove_subclass() change (GH-30750) Ok, this change fixed buildbots. I saw code in typeobject.c which uses a borrowed reference to tp_subclasses with a loop which can modify tp_subclasses. This code should be modified to hold a strong reference to tp_subclasses while accessing it. The test_mock_add_spec() test of test_unittest modifies the subclasses of many types and so is indirectly a stress tests for code accessing tp_subclasses. That's why the regression was only seen in this specific test. |
|||
| msg411148 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 16:53 | |
New changeset a1bf329bca80a0259da454c936075e11e6af710f by Victor Stinner in branch 'main': bpo-46417: Add missing types of _PyTypes_InitTypes() (GH-30749) https://github.com/python/cpython/commit/a1bf329bca80a0259da454c936075e11e6af710f |
|||
| msg411182 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 20:39 | |
New changeset bc67f189fdd62ed42013fa05cd0ef2df498f5967 by Victor Stinner in branch 'main': bpo-46417: Add _PyType_CAST() macro (GH-30760) https://github.com/python/cpython/commit/bc67f189fdd62ed42013fa05cd0ef2df498f5967 |
|||
| msg411201 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 22:29 | |
New changeset 8ee07dda139f3fa1d7c58a29532a98efc790568d by Victor Stinner in branch 'main': bpo-46417: Add _PyType_GetSubclasses() function (GH-30761) https://github.com/python/cpython/commit/8ee07dda139f3fa1d7c58a29532a98efc790568d |
|||
| msg411202 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 22:30 | |
New changeset 7835cbf949c413a746324721a352cc72670a8a36 by Victor Stinner in branch 'main': bpo-46417: Use _PyType_CAST() in Python directory (GH-30769) https://github.com/python/cpython/commit/7835cbf949c413a746324721a352cc72670a8a36 |
|||
| msg411203 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月21日 22:33 | |
New changeset ac1f152421fab3ac854fe4565c575b306e2bb4b5 by Victor Stinner in branch 'main': bpo-46417: Use _PyType_CAST() in Objects directory (GH-30764) https://github.com/python/cpython/commit/ac1f152421fab3ac854fe4565c575b306e2bb4b5 |
|||
| msg411232 - (view) | Author: Kumar Aditya (kumaraditya) * (Python triager) | Date: 2022年01月22日 05:34 | |
The following patch further reduces the reference but not sure if it is correct. diff --git a/Objects/object.c b/Objects/object.c index a5ee8eef4a..2ba6d14d5b 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1853,6 +1853,9 @@ static PyTypeObject* static_types[] = { &PyClassMethod_Type, &PyCode_Type, &PyComplex_Type, + &PyContext_Type, + &PyContextVar_Type, + &PyContextToken_Type, &PyCoro_Type, &PyDictItems_Type, &PyDictIterItem_Type, @@ -1911,6 +1914,13 @@ static PyTypeObject* static_types[] = { &_PyAsyncGenAThrow_Type, &_PyAsyncGenWrappedValue_Type, &_PyCoroWrapper_Type, + &_PyHamt_Type, + &_PyHamt_ArrayNode_Type, + &_PyHamt_BitmapNode_Type, + &_PyHamt_CollisionNode_Type, + &_PyHamtKeys_Type, + &_PyHamtValues_Type, + &_PyHamtItems_Type, &_PyInterpreterID_Type, &_PyManagedBuffer_Type, &_PyMethodWrapper_Type, Before: Running Debug|x64 interpreter... [4929 refs, 1988 blocks] After: Running Debug|x64 interpreter... [4541 refs, 1853 blocks] |
|||
| msg411255 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 14:08 | |
New changeset f1c6ae3270913e095d24ae13ecf96f5a32c8c503 by Victor Stinner in branch 'main': bpo-46417: Fix race condition on setting type __bases__ (GH-30788) https://github.com/python/cpython/commit/f1c6ae3270913e095d24ae13ecf96f5a32c8c503 |
|||
| msg411256 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 14:28 | |
New changeset acda9f3b90c33e4020237cb9e5c676efb38f7847 by Miss Islington (bot) in branch '3.10': bpo-46417: Fix race condition on setting type __bases__ (GH-30788) (GH-30789) https://github.com/python/cpython/commit/acda9f3b90c33e4020237cb9e5c676efb38f7847 |
|||
| msg411257 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 14:28 | |
New changeset f1796f29478f08f34e0c30a060622c0b2d843e2c by Miss Islington (bot) in branch '3.9': bpo-46417: Fix race condition on setting type __bases__ (GH-30788) (GH-30790) https://github.com/python/cpython/commit/f1796f29478f08f34e0c30a060622c0b2d843e2c |
|||
| msg411263 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 15:53 | |
New changeset 2d03b73cc9c0dada3243eab1373a46dbd98d24a0 by Victor Stinner in branch 'main': bpo-46417: remove_subclass() clears tp_subclasses (GH-30793) https://github.com/python/cpython/commit/2d03b73cc9c0dada3243eab1373a46dbd98d24a0 |
|||
| msg411271 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 17:55 | |
New changeset 500c146387b01ea797b52e6a54caf228384e184c by Victor Stinner in branch 'main': bpo-46417: Clear more static types (GH-30796) https://github.com/python/cpython/commit/500c146387b01ea797b52e6a54caf228384e184c |
|||
| msg411272 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 17:56 | |
New changeset 3a4c15bb9815b6f4652621fe6043ae18e0d202b3 by Victor Stinner in branch 'main': bpo-46417: Cleanup typeobject.c code (GH-30795) https://github.com/python/cpython/commit/3a4c15bb9815b6f4652621fe6043ae18e0d202b3 |
|||
| msg411275 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 18:31 | |
New changeset 6cacdb42454264ae75cab5e32bb62876da43bf6f by Victor Stinner in branch 'main': bpo-46417: _PyTypes_FiniTypes() clears object and type (GH-30798) https://github.com/python/cpython/commit/6cacdb42454264ae75cab5e32bb62876da43bf6f |
|||
| msg411276 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 18:32 | |
Kumar Aditya: "The following patch further reduces the reference but not sure if it is correct (...)" Right! PyContext and PyHamt types were on my TODO list ;-) They are now cleared since this change: bpo-46417: Clear more static types (GH-30796) https://github.com/python/cpython/commit/500c146387b01ea797b52e6a54caf228384e184c It's similar to your change, but more complete :-) |
|||
| msg411281 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 19:05 | |
Attached cannot_deallocate.patch explains why some static types cannot be deallocated. It lists (static) types which are not cleard properly at Python exit. Simplest example: --- $ ./python -c pass Cannot clear type 'object': it still has subclasses * EncodingMap * fieldnameiterator * formatteriterator * BaseException * _io._IOBase * _io._BytesIOBuffer * _io.IncrementalNewlineDecoder --- More complete example: --- $ ./python setup.py build running build (...) Cannot clear type 'types.GenericAlias': it still has subclasses * _CallableGenericAlias Cannot clear type 'tuple': it still has subclasses * datetime.IsoCalendarDate * DecimalTuple Cannot clear type 'staticmethod': it still has subclasses * abstractstaticmethod Cannot clear type 'property': it still has subclasses * abstractproperty Cannot clear type 'list': it still has subclasses * MyList Cannot clear type 'dict': it still has subclasses * collections.defaultdict * StgDict Cannot clear type 'classmethod': it still has subclasses * abstractclassmethod Cannot clear type 'type': it still has subclasses * ABCMeta * _ctypes.PyCStructType * _ctypes.UnionType * _ctypes.PyCPointerType * _ctypes.PyCArrayType * _ctypes.PyCSimpleType * _ctypes.PyCFuncPtrType Cannot clear type 'object': it still has subclasses * type * classmethod * dict * list * property * staticmethod * tuple * types.GenericAlias * EncodingMap * fieldnameiterator * formatteriterator * BaseException * ModuleSpec * FrozenImporter * _io._IOBase * _io._BytesIOBuffer * _io.IncrementalNewlineDecoder * _LoaderBasics * FileLoader * _abc._abc_data * ABC * Hashable * Awaitable * AsyncIterable * Iterable * Sized * Container * Callable * itertools.accumulate * itertools.combinations * itertools.combinations_with_replacement * itertools.cycle * itertools.dropwhile * itertools.takewhile * itertools.islice * itertools.starmap * itertools.chain * itertools.compress * itertools.filterfalse * itertools.count * itertools.zip_longest * itertools.pairwise * itertools.permutations * itertools.product * itertools.repeat * itertools.groupby * itertools._grouper * itertools._tee * itertools._tee_dataobject * collections.deque * _collections._deque_iterator * _collections._deque_reverse_iterator * _collections._tuplegetter * _IterationGuard * WeakSet * _struct.Struct * _struct.unpack_iterator * datetime.date * datetime.time * datetime.timedelta * datetime.tzinfo * _pickle.Pdata * _pickle.PicklerMemoProxy * _pickle.UnpicklerMemoProxy * _pickle.Pickler * _pickle.Unpickler * _socket.socket * _asyncio.FutureIter * TaskStepMethWrapper * _RunningLoopHolder * _asyncio.Future * _xxsubinterpreters.ChannelID * matmulType * ipowType * awaitType * MethodDescriptorBase * GenericAlias * Generic * MethInstance * MethClass * MethStatic * _testcapi.HeapCType * _testcapi.ContainerNoGC * _curses.window * ossaudiodev.oss_audio_device * ossaudiodev.oss_mixer_device * _elementtree._element_iterator * xml.etree.ElementTree.TreeBuilder * xml.etree.ElementTree.Element * xml.etree.ElementTree.XMLParser * decimal.Decimal * decimal.Context * decimal.SignalDictMixin * decimal.ContextManager * Number * _multiprocessing.SemLock * xxlimited.Xxo * CArgObject * _ctypes.CThunkObject * _ctypes._CData * _ctypes.CField * _ctypes.DictRemover * _ctypes.StructParam_Type --- |
|||
| msg411290 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 20:49 | |
New changeset f1bcdeaca6e912a2bec1fbcff76cc49e7f761d38 by Victor Stinner in branch 'main': bpo-46417: Factorize _PyExc_InitTypes() code (GH-30804) https://github.com/python/cpython/commit/f1bcdeaca6e912a2bec1fbcff76cc49e7f761d38 |
|||
| msg411291 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 21:31 | |
New changeset 621a45ccacd121f9ae4d8a539f040410c74b253b by Victor Stinner in branch 'main': bpo-46417: Py_Finalize() clears static exceptioins (GH-30805) https://github.com/python/cpython/commit/621a45ccacd121f9ae4d8a539f040410c74b253b |
|||
| msg411292 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 21:56 | |
New changeset 1626bf4ac7aef1244e6f886e63a31f7ed65fbd10 by Victor Stinner in branch 'main': bpo-46417: Clear Unicode static types at exit (GH-30806) https://github.com/python/cpython/commit/1626bf4ac7aef1244e6f886e63a31f7ed65fbd10 |
|||
| msg411296 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 22:22 | |
New changeset 9c8e490b8f9e40a6fe9815be58bacaecab5369ee by Victor Stinner in branch 'main': bpo-46417: Clear _io module static objects at exit (GH-30807) https://github.com/python/cpython/commit/9c8e490b8f9e40a6fe9815be58bacaecab5369ee |
|||
| msg411300 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 23:07 | |
New changeset 12f4ac3bc848244242d6b8a7ee158b985fd64744 by Victor Stinner in branch 'main': bpo-46417: Clear symtable identifiers at exit (GH-30809) https://github.com/python/cpython/commit/12f4ac3bc848244242d6b8a7ee158b985fd64744 |
|||
| msg411303 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 23:32 | |
New changeset a1444f43584af0f7a0af72aa06ba0a86ae5a87a2 by Victor Stinner in branch 'main': bpo-46417: Fix _PyStaticType_Dealloc() (GH-30810) https://github.com/python/cpython/commit/a1444f43584af0f7a0af72aa06ba0a86ae5a87a2 |
|||
| msg411304 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 23:33 | |
The _PyStaticType_Dealloc() function cannot call PyObject_ClearWeakRefs() if the refcount is not zero. I am not sure if it's a real issue or not. Maybe the weakref list must be cleared (release memory), but callbacks must not be called? |
|||
| msg411305 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 23:34 | |
cannot_deallocate2.patch: updated patch to debug which types are not cleared at exit. |
|||
| msg411307 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月22日 23:41 | |
> New changeset a1444f43584af0f7a0af72aa06ba0a86ae5a87a2 by Victor Stinner in branch 'main': > bpo-46417: Fix _PyStaticType_Dealloc() (GH-30810) > https://github.com/python/cpython/commit/a1444f43584af0f7a0af72aa06ba0a86ae5a87a2 At this commit, Py_Finalize() no longer leaks references. It exceeded my expectations, it even makes _Py_RefTotal negative :-D $ ./python -I -X showrefcount -c pass [-4 refs, 61 blocks] I'm not sure why it's negative, but bpo-46449 should be investigate first. |
|||
| msg411317 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月23日 00:30 | |
See also bpo-46476: Not all memory allocated by _Py_Quicken() is released at Python exit. |
|||
| msg411329 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月23日 01:20 | |
New changeset 976dec9b3b35fddbaa893c99297e0c54731451b5 by Victor Stinner in branch 'main': bpo-46417: _PyList_Fini() clears indexerr (GH-30815) https://github.com/python/cpython/commit/976dec9b3b35fddbaa893c99297e0c54731451b5 |
|||
| msg411332 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月23日 02:22 | |
> See also bpo-46476: Not all memory allocated by _Py_Quicken() is released at Python exit. If you apply my workaround for bpo-46476: https://bugs.python.org/issue46476#msg411321 Python no longer leaks any memory block at exit for the simplest command! $ ./python -I -X showrefcount -c pass [-5 refs, 0 blocks] Moreover, I modified deepfreeze to only freeze importlib._bootstrap and importlib._bootstrap_external. It confirms that bpo-46449 is causing the negative reference count, because with these additional local changes I get a positive _Py_RefTotal: $ ./python -I -X showrefcount -c pass [6 refs, 0 blocks] |
|||
| msg411917 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月27日 20:21 | |
New changeset 6c6a153dee132116611f2d5df0689a5a605f62b6 by Victor Stinner in branch 'main': bpo-46417: signal: move siginfo_type to the module state (GH-30964) https://github.com/python/cpython/commit/6c6a153dee132116611f2d5df0689a5a605f62b6 |
|||
| msg411918 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月27日 20:22 | |
I close the issue. I cleared most static types at exit. Following work can be done in bpo-40077 or other issues. |
|||
| msg411994 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2022年01月28日 13:08 | |
New changeset 9a241271139a317597aca71d5971346b2cfe7dbd by Victor Stinner in branch 'main': bpo-46417: _PyStructSequence_FiniType() updates _Py_RefTotal (GH-30988) https://github.com/python/cpython/commit/9a241271139a317597aca71d5971346b2cfe7dbd |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:59:54 | admin | set | github: 90575 |
| 2022年01月28日 13:08:43 | vstinner | set | messages: + msg411994 |
| 2022年01月28日 12:48:28 | vstinner | set | pull_requests: + pull_request29167 |
| 2022年01月27日 20:22:54 | vstinner | set | status: open -> closed resolution: fixed messages: + msg411918 stage: patch review -> resolved |
| 2022年01月27日 20:21:58 | vstinner | set | messages: + msg411917 |
| 2022年01月27日 17:55:39 | vstinner | set | pull_requests: + pull_request29143 |
| 2022年01月23日 02:22:48 | vstinner | set | messages: + msg411332 |
| 2022年01月23日 01:20:59 | vstinner | set | messages: + msg411329 |
| 2022年01月23日 00:56:49 | vstinner | set | pull_requests: + pull_request29002 |
| 2022年01月23日 00:30:36 | vstinner | set | messages: + msg411317 |
| 2022年01月22日 23:41:40 | vstinner | set | messages: + msg411307 |
| 2022年01月22日 23:34:12 | vstinner | set | files:
+ cannot_deallocate2.patch messages: + msg411305 |
| 2022年01月22日 23:33:49 | vstinner | set | messages: + msg411304 |
| 2022年01月22日 23:32:15 | vstinner | set | messages: + msg411303 |
| 2022年01月22日 23:07:06 | vstinner | set | messages: + msg411300 |
| 2022年01月22日 22:33:23 | vstinner | set | pull_requests: + pull_request28998 |
| 2022年01月22日 22:25:04 | vstinner | set | pull_requests: + pull_request28997 |
| 2022年01月22日 22:22:37 | vstinner | set | messages: + msg411296 |
| 2022年01月22日 22:05:04 | vstinner | set | pull_requests: + pull_request28995 |
| 2022年01月22日 21:56:08 | vstinner | set | messages: + msg411292 |
| 2022年01月22日 21:35:29 | vstinner | set | pull_requests: + pull_request28994 |
| 2022年01月22日 21:31:56 | vstinner | set | messages: + msg411291 |
| 2022年01月22日 21:05:43 | vstinner | set | pull_requests: + pull_request28993 |
| 2022年01月22日 20:49:11 | vstinner | set | messages: + msg411290 |
| 2022年01月22日 20:21:06 | vstinner | set | pull_requests: + pull_request28992 |
| 2022年01月22日 19:05:31 | vstinner | set | files:
+ cannot_deallocate.patch messages: + msg411281 |
| 2022年01月22日 18:32:39 | vstinner | set | messages: + msg411276 |
| 2022年01月22日 18:31:32 | vstinner | set | messages: + msg411275 |
| 2022年01月22日 18:01:39 | vstinner | set | pull_requests: + pull_request28983 |
| 2022年01月22日 17:56:14 | vstinner | set | messages: + msg411272 |
| 2022年01月22日 17:55:55 | vstinner | set | messages: + msg411271 |
| 2022年01月22日 17:24:34 | vstinner | set | pull_requests: + pull_request28981 |
| 2022年01月22日 17:12:12 | vstinner | set | pull_requests: + pull_request28980 |
| 2022年01月22日 15:53:49 | vstinner | set | messages: + msg411263 |
| 2022年01月22日 15:16:44 | vstinner | set | pull_requests: + pull_request28978 |
| 2022年01月22日 14:28:57 | vstinner | set | messages: + msg411257 |
| 2022年01月22日 14:28:57 | vstinner | set | messages: + msg411256 |
| 2022年01月22日 14:13:11 | vstinner | set | pull_requests: + pull_request28976 |
| 2022年01月22日 14:08:56 | miss-islington | set | pull_requests: + pull_request28975 |
| 2022年01月22日 14:08:54 | vstinner | set | messages: + msg411255 |
| 2022年01月22日 14:08:50 | miss-islington | set | nosy:
+ miss-islington pull_requests: + pull_request28974 |
| 2022年01月22日 13:42:11 | vstinner | set | pull_requests: + pull_request28973 |
| 2022年01月22日 05:34:21 | kumaraditya | set | nosy:
+ kumaraditya messages: + msg411232 |
| 2022年01月22日 01:19:21 | vstinner | set | pull_requests: + pull_request28960 |
| 2022年01月21日 22:33:57 | vstinner | set | messages: + msg411203 |
| 2022年01月21日 22:30:27 | vstinner | set | messages: + msg411202 |
| 2022年01月21日 22:29:21 | vstinner | set | messages: + msg411201 |
| 2022年01月21日 21:36:21 | vstinner | set | pull_requests: + pull_request28955 |
| 2022年01月21日 21:35:59 | vstinner | set | pull_requests: + pull_request28954 |
| 2022年01月21日 21:21:24 | vstinner | set | pull_requests: + pull_request28950 |
| 2022年01月21日 21:08:08 | vstinner | set | pull_requests: + pull_request28949 |
| 2022年01月21日 20:39:10 | vstinner | set | messages: + msg411182 |
| 2022年01月21日 20:10:21 | vstinner | set | pull_requests: + pull_request28948 |
| 2022年01月21日 19:53:53 | vstinner | set | pull_requests: + pull_request28947 |
| 2022年01月21日 16:53:20 | vstinner | set | messages: + msg411148 |
| 2022年01月21日 16:31:20 | vstinner | set | messages: + msg411143 |
| 2022年01月21日 15:45:18 | vstinner | set | messages: + msg411139 |
| 2022年01月21日 14:47:35 | vstinner | set | pull_requests: + pull_request28937 |
| 2022年01月21日 13:58:53 | vstinner | set | pull_requests: + pull_request28936 |
| 2022年01月21日 13:27:05 | vstinner | set | messages: + msg411127 |
| 2022年01月21日 12:44:56 | vstinner | set | messages: + msg411122 |
| 2022年01月21日 12:06:38 | vstinner | set | messages: + msg411118 |
| 2022年01月21日 12:05:35 | vstinner | set | messages: + msg411117 |
| 2022年01月21日 11:26:13 | vstinner | set | pull_requests: + pull_request28931 |
| 2022年01月21日 11:13:24 | vstinner | set | pull_requests: + pull_request28930 |
| 2022年01月21日 03:02:48 | vstinner | set | messages: + msg411077 |
| 2022年01月21日 03:02:21 | vstinner | set | messages: + msg411076 |
| 2022年01月21日 02:30:29 | vstinner | set | messages: + msg411073 |
| 2022年01月21日 01:58:23 | vstinner | set | pull_requests: + pull_request28923 |
| 2022年01月21日 01:55:31 | vstinner | set | pull_requests: + pull_request28922 |
| 2022年01月21日 01:52:51 | vstinner | set | messages: + msg411071 |
| 2022年01月21日 01:51:12 | vstinner | set | messages: + msg411070 |
| 2022年01月21日 01:23:05 | vstinner | set | pull_requests: + pull_request28921 |
| 2022年01月21日 01:19:46 | vstinner | set | pull_requests: + pull_request28920 |
| 2022年01月21日 01:12:27 | vstinner | set | messages: + msg411066 |
| 2022年01月21日 00:49:38 | vstinner | set | pull_requests: + pull_request28919 |
| 2022年01月21日 00:42:35 | vstinner | set | messages: + msg411064 |
| 2022年01月21日 00:38:58 | vstinner | set | messages: + msg411063 |
| 2022年01月20日 22:17:56 | vstinner | set | messages: + msg411049 |
| 2022年01月20日 16:13:01 | vstinner | set | messages: + msg411033 |
| 2022年01月20日 13:39:05 | corona10 | set | nosy:
+ corona10 |
| 2022年01月20日 13:18:56 | petr.viktorin | set | messages: + msg411025 |
| 2022年01月18日 17:21:29 | phsilva | set | nosy:
+ phsilva |
| 2022年01月18日 13:59:27 | vstinner | set | components: + Interpreter Core, - Subinterpreters |
| 2022年01月18日 13:59:21 | vstinner | set | title: [subinterpreters] Clear static types in Py_Finalize() -> Clear static types in Py_Finalize() for embedded Python |
| 2022年01月18日 13:58:57 | vstinner | set | messages: + msg410866 |
| 2022年01月18日 12:57:29 | petr.viktorin | set | nosy:
+ petr.viktorin messages: + msg410858 |
| 2022年01月18日 12:45:10 | shihai1991 | set | nosy:
+ shihai1991 |
| 2022年01月18日 08:48:33 | erlendaasland | set | nosy:
+ erlendaasland |
| 2022年01月17日 17:32:48 | vstinner | set | keywords:
+ patch stage: patch review pull_requests: + pull_request28847 |
| 2022年01月17日 17:19:20 | vstinner | create | |