Skip to content

Commit b43cf0d

Browse files
authored
Merge branch 'main' into gh-129068-rangeiter-next
2 parents 30bbb31 + 6e625f8 commit b43cf0d

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

Lib/test/test_generators.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ def gen():
134134
self.assertEqual(len(resurrected), 1)
135135
self.assertIsInstance(resurrected[0].gi_code, types.CodeType)
136136

137+
def test_exhausted_generator_frame_cycle(self):
138+
def g():
139+
yield
140+
141+
generator = g()
142+
frame = generator.gi_frame
143+
self.assertIsNone(frame.f_back)
144+
next(generator)
145+
self.assertIsNone(frame.f_back)
146+
next(generator, None)
147+
self.assertIsNone(frame.f_back)
148+
137149

138150
class GeneratorTest(unittest.TestCase):
139151

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix reference cycle in exhausted generator frames. Patch by Savannah Ostrowski.

Python/ceval.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2309,9 +2309,9 @@ clear_gen_frame(PyThreadState *tstate, _PyInterpreterFrame * frame)
23092309
tstate->exc_info = gen->gi_exc_state.previous_item;
23102310
gen->gi_exc_state.previous_item = NULL;
23112311
assert(frame->frame_obj == NULL || frame->frame_obj->f_frame == frame);
2312+
frame->previous = NULL;
23122313
_PyFrame_ClearExceptCode(frame);
23132314
_PyErr_ClearExcState(&gen->gi_exc_state);
2314-
frame->previous = NULL;
23152315
}
23162316

23172317
void

Tools/tsan/suppressions_free_threading.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ race_top:_PyObject_TryGetInstanceAttribute
2020
race_top:PyUnstable_InterpreterFrame_GetLine
2121
race_top:write_thread_id
2222

23-
# gh-129748: test.test_free_threading.test_slots.TestSlots.test_object
24-
race_top:mi_block_set_nextx
25-
2623
# https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40
2724
thread:pthread_create
2825

0 commit comments

Comments
 (0)