Reference leak in code object with reference loop
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
If the code object creates a reference loop, this causes a reference leak. For example (see :
def f():
return 1234.5
code = f.__code__
a = []
code = code.replace(co_consts=code.co_consts + (a,))
a.append(code)
(See https://github.com/python/cpython/blob/d61fcf834d197f0113a6a507fdbecc1545d9d483/Lib/test/test_marshal.py#L354-L360 added in #148698)
This is because in the GIL-enabled build the code object does not support GC and does not have tp_traverse.
Linked PRs
- gh-151155
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
Beginne mit dem Reproducer und dem referenzierten Regressionstest in Lib/test/test_marshal.py ungefähr bei den Zeilen 354–360. Untersuche, wie GIL-aktivierte Codeobjekte die Garbage Collection und das Traversieren handhaben, und konzentriere dich dabei auf die im Issue beschriebene fehlende Unterstützung. Als abgeschlossen gilt die Arbeit, wenn die Referenzschleife keinen Leak mehr verursacht und der marshal-Test weiterhin erfolgreich ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100