https://github.com/python/cpython/commit/ba9c1986305517ed88470129fe7c71aaec22d08d
commit: ba9c1986305517ed88470129fe7c71aaec22d08d
branch: main
author: Pablo Galindo Salgado <[email protected]>
committer: pablogsal <[email protected]>
date: 2025-07-08T13:23:31+01:00
summary:
gh-136186: Fix race condition in
test_external_inspection.test_only_active_thread (#136347)
files:
M Lib/test/test_external_inspection.py
diff --git a/Lib/test/test_external_inspection.py
b/Lib/test/test_external_inspection.py
index 0f31c225e68de3..44890ebfe5f76d 100644
--- a/Lib/test/test_external_inspection.py
+++ b/Lib/test/test_external_inspection.py
@@ -5,6 +5,7 @@
import sys
import socket
import threading
+import time
from asyncio import staggered, taskgroups, base_events, tasks
from unittest.mock import ANY
from test.support import os_helper, SHORT_TIMEOUT, busy_retry,
requires_gil_enabled
@@ -930,9 +931,6 @@ def main_work():
# Signal threads to start waiting
ready_event.set()
- # Give threads time to start sleeping
- time.sleep(0.1)
-
# Now do busy work to hold the GIL
main_work()
"""
@@ -967,7 +965,23 @@ def main_work():
# Get stack trace with all threads
unwinder_all = RemoteUnwinder(p.pid, all_threads=True)
- all_traces = unwinder_all.get_stack_trace()
+ for _ in range(10):
+ # Wait for the main thread to start its busy work
+ all_traces = unwinder_all.get_stack_trace()
+ found = False
+ for thread_id, stack in all_traces:
+ if not stack:
+ continue
+ current_frame = stack[0]
+ if current_frame.funcname == "main_work" and
current_frame.lineno >15:
+ found = True
+
+ if found:
+ break
+ # Give a bit of time to take the next sample
+ time.sleep(0.1)
+ else:
+ self.fail("Main thread did not start its busy work on
time")
# Get stack trace with only GIL holder
unwinder_gil = RemoteUnwinder(p.pid, only_active_thread=True)
_______________________________________________
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]