Fix Condition.await bug when cancelling #487
Merged
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.
Condition.await
needs to re-acquire the lock when cancelled. However, if another fiber is holding the lock then this operation must wait and would itself get cancelled.Reported by @polytypic.
It's a little annoying that we have to do a non-cancellable wait during cancellation, since typically we only need the lock so we can call unlock on it again immediately. I did try adding a
wait_until
function that handles all the locking, which allows simplifying this. However, we would need multiple versions of it to cover the various ways of using a lock (use_rw
,use_ro
, and~protected
), which seems a bit messy.