[3.13] gh-110206: Fix multiprocessing test_notify_all (GH-130933) #130950
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The test could deadlock trying join on the worker processes due to a
combination of behaviors:
The use of
assertReachesEventually
did not ensure that workersactually woken.release() because the SyncManager's Semaphore does not
implement get_value.
This mean that the test could finish and the variable "sleeping" would
got out of scope and be collected. This unregisters the proxy leading
to failures in the worker or possibly the manager.
The subsequent call to
p.join()
during cleanUp therefore neverfinished.
This takes two approaches to fix this:
Use woken.acquire() to ensure that the workers actually finish
calling woken.release()
At the end of the test, wait until the workers are finished, while
cond
,sleeping
, andwoken
are still valid.(cherry picked from commit c476410)
Co-authored-by: Sam Gross [email protected]