Bug: Race condition in next_when_notified#280
Open
ollie-etl wants to merge 1 commit intotokio-rs:masterfrom
Open
Bug: Race condition in next_when_notified#280ollie-etl wants to merge 1 commit intotokio-rs:masterfrom
ollie-etl wants to merge 1 commit intotokio-rs:masterfrom
Conversation
Contributor
Author
|
@mzabaluev you're probably best placed for an opinion |
mzabaluev
reviewed
Oct 1, 2023
Contributor
mzabaluev
left a comment
There was a problem hiding this comment.
Thanks! My original code overlooked this possibility.
I have suggestions to improve the comments, otherwise the fix is good.
Comment on lines
276
to
+279
| // In the single-threaded case, no buffers could get checked in | ||
| // between us calling `try_next` and here, so we can't miss a wakeup. | ||
| notified.as_mut().await; | ||
| // between us calling `try_next` and here. However, we may still miss a wake-up, | ||
| // as multiple check-ins can occur before any waking tasks are scheduled, | ||
| // which would result in the loss of a permit |
Contributor
There was a problem hiding this comment.
This is right, thanks for the clarification. In fact, the preamble of this comment can be completely replaced because it's irrelevant: multiple buffers can still be checked in while awaiting on notified before another iteration of the loop.
|
|
||
| // Await notify_one | ||
| notified.as_mut().await; | ||
|
|
Contributor
There was a problem hiding this comment.
I think the comment below clarifies why the whole branch below the if ... { ... return buf; } can be taken, so part of it should be placed above this.
OneOfOne
added a commit
to ooo-rs/tokio-uring-ooo
that referenced
this pull request
Apr 13, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
I believe the following fixes a race condition in
FixedBufPool. We were observing a situation where, without resorting to timeouts to force retries, multiple concurrent calls to next would eventually all stall.The fix (setting enable) is take directly from https://docs.rs/tokio/latest/tokio/sync/futures/struct.Notified.html#method.enable
I believe this is happening in the presence of only concurrency, not parallelism (single threaded)