https://github.com/python/cpython/commit/ed27405a6e9660baac6b6b066ee817ccb6239808
commit: ed27405a6e9660baac6b6b066ee817ccb6239808
branch: main
author: Timofei Ivankov <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-11-05T16:14:51+05:30
summary:
gh-161124: Fix asyncio call graph reporting event loop frames for excessive
depth (#161126)
files:
A Misc/NEWS.d/next/Library/2026-11-01-22-07-24.gh-issue-161124.c2YmcV.rst
M Lib/asyncio/graph.py
M Lib/test/test_asyncio/test_graph.py
diff --git a/Lib/asyncio/graph.py b/Lib/asyncio/graph.py
index ce23339782c16e..d76d2f6383343d 100644
--- a/Lib/asyncio/graph.py
+++ b/Lib/asyncio/graph.py
@@ -2,6 +2,7 @@
import dataclasses
import io
+import operator
import sys
import types
@@ -160,7 +161,8 @@ def capture_call_graph(
call_stack: list[FrameCallGraphEntry] = []
- f = sys._getframe(depth) if limit != 0 else None
+ # gh-161124: find the task boundary before skipping frames
+ f = sys._getframe(0) if limit != 0 else None
try:
while f is not None:
# gh-156988: sync gen should not clear the call chain
@@ -178,6 +180,8 @@ def capture_call_graph(
finally:
del f
+ call_stack = call_stack[max(0, operator.index(depth)):]
+
awaited_by = []
if future._asyncio_awaited_by:
for parent in future._asyncio_awaited_by:
diff --git a/Lib/test/test_asyncio/test_graph.py
b/Lib/test/test_asyncio/test_graph.py
index 71853ab642f451..8af42a851707a5 100644
--- a/Lib/test/test_asyncio/test_graph.py
+++ b/Lib/test/test_asyncio/test_graph.py
@@ -785,6 +785,11 @@ async def main():
self.assertTrue(stack_for_fut[1].startswith('* Future(id='))
+ async def test_call_graph_depth_beyond_task(self):
+ # gh-161124
+ graph = asyncio.capture_call_graph(depth=2)
+ self.assertEqual(graph.call_stack, ())
+
async def test_capture_call_graph_positive_limit(self):
captured = None
diff --git
a/Misc/NEWS.d/next/Library/2026-11-01-22-07-24.gh-issue-161124.c2YmcV.rst
b/Misc/NEWS.d/next/Library/2026-11-01-22-07-24.gh-issue-161124.c2YmcV.rst
new file mode 100644
index 00000000000000..32cfb56adb8316
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-11-01-22-07-24.gh-issue-161124.c2YmcV.rst
@@ -0,0 +1,2 @@
+Fix :func:`asyncio.print_call_graph` reporting event loop frames when
+*depth* exceeds the task stack. Patch by Timofei Ivankov.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]