mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
gh-127421: Fix race in test_start_new_thread_failed (#127549)
Fix race in test_start_new_thread_failed When we succeed in starting a new thread, for example if setrlimit was ineffective, we must wait for the newly spawned thread to exit. Otherwise, we run the risk that the newly spawned thread will race with runtime finalization and access memory that has already been clobbered/freed. `_thread.start_new_thread()` only spawns daemon threads, which the runtime does not wait for at shutdown, and does not return a handle. Use `_thread.start_joinable_thread()` and join the resulting handle when the thread is started successfully.
This commit is contained in:
parent
0cb5222079
commit
13b68e1a61
1 changed files with 2 additions and 1 deletions
|
@ -1192,11 +1192,12 @@ class ThreadTests(BaseTestCase):
|
|||
resource.setrlimit(resource.RLIMIT_NPROC, (0, hard))
|
||||
|
||||
try:
|
||||
_thread.start_new_thread(f, ())
|
||||
handle = _thread.start_joinable_thread(f)
|
||||
except RuntimeError:
|
||||
print('ok')
|
||||
else:
|
||||
print('!skip!')
|
||||
handle.join()
|
||||
"""
|
||||
_, out, err = assert_python_ok("-u", "-c", code)
|
||||
out = out.strip()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue