LeakSanitizer detects memory leaks in test_import with _testsinglephase module in subinterpreter
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 36k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
LeakSanitizer detects memory leaks when running test_import with the _testsinglephase module loaded in a subinterpreter.
How to Reproduce
Build:
CC=clang CXX=clang++ ./configure --disable-optimizations --with-pydebug --with-address-sanitizer && make -j$(nproc)
Run:
./python -X dev -X showrefcount -m test test_import -j0
Leak Summary
==643791==ERROR: LeakSanitizer: detected memory leaks
SUMMARY: AddressSanitizer: 6709 byte(s) leaked in 45 allocation(s).
Code Locations
The leaks originate from:
Subinterpreter execution:
- https://github.com/python/cpython/blob/e8e0f411bae1dde634fb152a81e1db1ad1cd2eaa/Modules/_testcapimodule.c#L1223
(run_in_subinterp)
Module initialization:
- https://github.com/python/cpython/blob/e8e0f411bae1dde634fb152a81e1db1ad1cd2eaa/Modules/_testsinglephase.c#L516
(init__testsinglephase_basic) - https://github.com/python/cpython/blob/e8e0f411bae1dde634fb152a81e1db1ad1cd2eaa/Modules/_testsinglephase.c#L303
(init_statewithPyErr_NewException)
Import machinery:
- https://github.com/python/cpython/blob/e8e0f411bae1dde634fb152a81e1db1ad1cd2eaa/Python/importdl.c#L429
(_PyImport_RunModInitFunc)
Leaked Objects
- Type objects (1016 bytes × 2): via
type_new→PyErr_NewException - Dictionary keys (424 bytes × 2): via
new_keys_object→PyDict_SetItemString - PyCMethod objects (384 bytes × 2 groups): via
PyModule_AddFunctions - Additional: Unicode strings, tuples, dictionaries
Full Output
See attached .log files for complete LeakSanitizer output for each version.
312.log
313.log
314.log
main.log
CPython versions tested on:
3.12, 3.13, 3.14, 3.15, CPython main branch
Operating systems tested on:
Linux
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduzieren Sie das Leak mit dem dokumentierten ASan-Build und ./python -X dev -X showrefcount -m test test_import -j0. Untersuchen Sie anschließend Modules/_testcapimodule.c (run_in_subinterp), Modules/_testsinglephase.c (init__testsinglephase_basic und init_state) sowie Python/importdl.c (_PyImport_RunModInitFunc). Die Aufgabe ist erledigt, wenn der Test abgeschlossen wird, ohne dass LeakSanitizer die aufgeführten Leaks meldet.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, python
- Bereich
- performance, testing
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100