mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
gh-130954: Fix multiprocessing test_notify_n (#130955)
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.
This commit is contained in:
parent
72e5b25efb
commit
edd1eca336
1 changed files with 13 additions and 8 deletions
|
@ -1654,12 +1654,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()
|
||||
|
@ -1686,7 +1684,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()
|
||||
|
@ -1763,16 +1763,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):
|
||||
|
@ -1807,6 +1808,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