Message367681
> Please backport to 3.8, then it will become part of 3.8.3rc1 which I'll be releasing tomorrow.
I propose to *not* fix this bug in Python 3.8:
* Python 3.8 stdlib doesn't seem to be impacted by this bug
* The number of third party C extension modules impated by this bug is very low or even zero
* The bug severity is minor *in practice*
* A backport can cause a C extension to crash
* The implementation may still change before Python 3.9.0 final release
--
The worst thing which can happen with this bug is that a C extension module creates many types and these types are never deleted. Well, it's annoying, but it's unlikely to happen. Usually, types are created exactly once in C extensions.
--
I'm not 100% comfortable with backporting the fix. Python 3.8.0, 3.8.1 and 3.8.2 have been released with the bug, and this issue is the first report. But I only saw the bug because many C extension modules of the Python 3.9 stdlib were converted to PyModuleDef_Init() and PyType_FromSpec().
--
I'm not comfortable to change the GC behavior in a subtle way in a 3.8.x minor release.
If a C extension module was impacted by this bug and decided to explicitly visit the type in its traverse function, this fix will crash the C extension crash...
--
At April 23, Serhiy proposed an alternative fix. But then he didn't propose a PR.
--
The bug only impacts C extension modules which use PyModuleDef_Init() and PyType_FromSpec().
Python 3.8 only uses PyModuleDef_Init() in the following modules:
vstinner@apu$ grep -l PyModuleDef_Init Modules/*.c
Modules/arraymodule.c
Modules/atexitmodule.c
Modules/binascii.c
Modules/_testmultiphase.c
Modules/xxlimited.c
Modules/xxmodule.c
Modules/xxsubtype.c
Python 3.8 only uses PyType_FromSpec() in the following modules:
$ grep -l PyType_FromSpec Modules/*.c
Modules/_curses_panel.c
Modules/_ssl.c
Modules/_testcapimodule.c
Modules/_testmultiphase.c
Modules/_tkinter.c
Modules/xxlimited.c
Intersection of the two sets: _testmultiphase and xxlimited, which are modules only used by the Python test suite.
It means that Python 3.8 standard library is *not* impacted by this bug.
Only third party C extension modules which use PyModuleDef_Init() *and* PyType_FromSpec() are impacted. Most C extension modules use statically allocated types and so are not impacted. |
|
Date |
User |
Action |
Args |
2020-04-29 17:26:02 | vstinner | set | recipients:
+ vstinner, tim.peters, lukasz.langa, serhiy.storchaka, corona10, pablogsal, shihai1991 |
2020-04-29 17:26:02 | vstinner | set | messageid: <1588181162.53.0.55084218909.issue40217@roundup.psfhosted.org> |
2020-04-29 17:26:02 | vstinner | link | issue40217 messages |
2020-04-29 17:26:02 | vstinner | create | |
|