LeakSanitizer detects memory leaks in test_import with _testsinglephase module in subinterpreter
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il leak con la build ASan documentata e ./python -X dev -X showrefcount -m test test_import -j0. Poi ispeziona Modules/_testcapimodule.c (run_in_subinterp), Modules/_testsinglephase.c (init__testsinglephase_basic e init_state) e Python/importdl.c (_PyImport_RunModInitFunc). Il lavoro è completo quando il test termina senza che LeakSanitizer segnali i leak elencati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, python
- Ambito
- performance, testing
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100