Skip to content

Commit 7652a6d

Browse files
gh-159739: Avoid leaking references during free-threaded GC enumeration (#159781)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
1 parent 95f94d0 commit 7652a6d

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix a reference leak in :func:`gc.get_objects` and :func:`gc.get_referrers`
2+
when an internal allocation fails in the free-threaded build.

‎Python/gc_free_threading.c‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2412,9 +2412,10 @@ visit_get_referrers(const mi_heap_t *heap, const mi_heap_area_t *area,
24122412
return true;
24132413
}
24142414
if (Py_TYPE(op)->tp_traverse(op, referrersvisit, arg->objs)) {
2415-
if (_PyObjectStack_Push(&arg->results, Py_NewRef(op)) < 0) {
2415+
if (_PyObjectStack_Push(&arg->results, op) < 0) {
24162416
return false;
24172417
}
2418+
Py_INCREF(op);
24182419
}
24192420

24202421
return true;
@@ -2459,9 +2460,10 @@ visit_get_objects(const mi_heap_t *heap, const mi_heap_area_t *area,
24592460
}
24602461

24612462
struct get_objects_args *arg = (struct get_objects_args *)args;
2462-
if (_PyObjectStack_Push(&arg->objects, Py_NewRef(op)) < 0) {
2463+
if (_PyObjectStack_Push(&arg->objects, op) < 0) {
24632464
return false;
24642465
}
2466+
Py_INCREF(op);
24652467
return true;
24662468
}
24672469

0 commit comments

Comments
 (0)