mirror of
https://github.com/python/cpython.git
synced 2025-12-11 03:20:01 +00:00
gh-136186: Fix race condition in test_external_inspection.test_only_active_thread (#136347)
This commit is contained in:
parent
0152df5fff
commit
ba9c198630
1 changed files with 18 additions and 4 deletions
|
|
@ -5,6 +5,7 @@ import importlib
|
||||||
import sys
|
import sys
|
||||||
import socket
|
import socket
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
from asyncio import staggered, taskgroups, base_events, tasks
|
from asyncio import staggered, taskgroups, base_events, tasks
|
||||||
from unittest.mock import ANY
|
from unittest.mock import ANY
|
||||||
from test.support import os_helper, SHORT_TIMEOUT, busy_retry, requires_gil_enabled
|
from test.support import os_helper, SHORT_TIMEOUT, busy_retry, requires_gil_enabled
|
||||||
|
|
@ -930,9 +931,6 @@ class TestGetStackTrace(unittest.TestCase):
|
||||||
# Signal threads to start waiting
|
# Signal threads to start waiting
|
||||||
ready_event.set()
|
ready_event.set()
|
||||||
|
|
||||||
# Give threads time to start sleeping
|
|
||||||
time.sleep(0.1)
|
|
||||||
|
|
||||||
# Now do busy work to hold the GIL
|
# Now do busy work to hold the GIL
|
||||||
main_work()
|
main_work()
|
||||||
"""
|
"""
|
||||||
|
|
@ -967,7 +965,23 @@ class TestGetStackTrace(unittest.TestCase):
|
||||||
|
|
||||||
# Get stack trace with all threads
|
# Get stack trace with all threads
|
||||||
unwinder_all = RemoteUnwinder(p.pid, all_threads=True)
|
unwinder_all = RemoteUnwinder(p.pid, all_threads=True)
|
||||||
|
for _ in range(10):
|
||||||
|
# Wait for the main thread to start its busy work
|
||||||
all_traces = unwinder_all.get_stack_trace()
|
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
|
# Get stack trace with only GIL holder
|
||||||
unwinder_gil = RemoteUnwinder(p.pid, only_active_thread=True)
|
unwinder_gil = RemoteUnwinder(p.pid, only_active_thread=True)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue