Steve Stagg <stest...@gmail.com> added the comment:
(sorry for spam!) So, this is a retained reference issue. If I change the script to be this: --- import gc DEPTH = 100 def foo(): global DEPTH try: yield except BaseException as e: DEPTH -= 1 if DEPTH < 1: return gc.collect() yield from foo() def x(): for m in foo(): print(i) try: x() except: pass ges = [o for o in gc.get_objects() if isinstance(o, GeneratorExit)] if ges: ge, = ges print(gc.get_referrers(ge)) --- Then there's a reference to the GeneratorExit being retained (I guess from the exception frames, althought I thought exception frames were cleared up these days?): [[GeneratorExit()], {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7fac8899ceb0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/sstagg/tmp/fuzztest/tx.py', '__cached__': None, 'gc': <module 'gc' (built-in)>, 'DEPTH': 99, 'foo': <function foo at 0x7fac887dc5e0>, 'x': <function x at 0x7fac887dc700>, 'ges': [GeneratorExit()], 'ge': GeneratorExit()}, <frame at 0x7fac8894d400, file '/home/sstagg/tmp/fuzztest/tx.py', line 14, code foo>] Exception ignored in: <generator object foo at 0x7fac88851740> RuntimeError: generator ignored GeneratorExit. Given the infinite loop happens during the finalization of the generator, I think this reference is stopping the loop from going forever. I tried removing the "as e" from the above script, and no references are retained. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42762> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com