mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
[3.13] gh-130954: Fix multiprocessing test_notify_n (GH-130955) (#130981)
The test could deadlock trying join on the worker processes.
Apply the same technique as gh-130933.
Join the process before the test ends in `test_notify` as well.
(cherry picked from commit edd1eca336
)
Co-authored-by: Sam Gross <colesbury@gmail.com>
This commit is contained in:
parent
14230cd96c
commit
fead51d808
1 changed files with 13 additions and 8 deletions
|
@ -1609,12 +1609,10 @@ class _TestCondition(BaseTestCase):
|
|||
p = self.Process(target=self.f, args=(cond, sleeping, woken))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
self.addCleanup(p.join)
|
||||
|
||||
p = threading.Thread(target=self.f, args=(cond, sleeping, woken))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
self.addCleanup(p.join)
|
||||
t = threading.Thread(target=self.f, args=(cond, sleeping, woken))
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
# wait for both children to start sleeping
|
||||
sleeping.acquire()
|
||||
|
@ -1641,7 +1639,9 @@ class _TestCondition(BaseTestCase):
|
|||
|
||||
# check state is not mucked up
|
||||
self.check_invariant(cond)
|
||||
p.join()
|
||||
|
||||
threading_helper.join_thread(t)
|
||||
join_process(p)
|
||||
|
||||
def test_notify_all(self):
|
||||
cond = self.Condition()
|
||||
|
@ -1718,16 +1718,17 @@ class _TestCondition(BaseTestCase):
|
|||
woken = self.Semaphore(0)
|
||||
|
||||
# start some threads/processes
|
||||
workers = []
|
||||
for i in range(3):
|
||||
p = self.Process(target=self.f, args=(cond, sleeping, woken))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
self.addCleanup(p.join)
|
||||
workers.append(p)
|
||||
|
||||
t = threading.Thread(target=self.f, args=(cond, sleeping, woken))
|
||||
t.daemon = True
|
||||
t.start()
|
||||
self.addCleanup(t.join)
|
||||
workers.append(t)
|
||||
|
||||
# wait for them to all sleep
|
||||
for i in range(6):
|
||||
|
@ -1762,6 +1763,10 @@ class _TestCondition(BaseTestCase):
|
|||
# check state is not mucked up
|
||||
self.check_invariant(cond)
|
||||
|
||||
for w in workers:
|
||||
# NOTE: join_process and join_thread are the same
|
||||
threading_helper.join_thread(w)
|
||||
|
||||
def test_timeout(self):
|
||||
cond = self.Condition()
|
||||
wait = TimingWrapper(cond.wait)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue