-
Notifications
You must be signed in to change notification settings - Fork 633
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FuturesUnordered: fix partial iteration #2574
Merged
taiki-e
merged 1 commit into
rust-lang:master
from
wfraser:futuresunordered-partial-iter-bugfix
Feb 23, 2022
Merged
FuturesUnordered: fix partial iteration #2574
taiki-e
merged 1 commit into
rust-lang:master
from
wfraser:futuresunordered-partial-iter-bugfix
Feb 23, 2022
Conversation
This file contains 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
wfraser
force-pushed
the
futuresunordered-partial-iter-bugfix
branch
from
February 23, 2022 08:18
904ac08
to
d76b9f8
Compare
The IntoIter impl advances the head pointer every iteration, but this breaks the linked list invariant that the head's prev should be null. If the iteration is not done to completion, on subsequent drop, FuturesUnordered::unlink relies on this broken invariant and ends up panicking. The fix is to maintain the `head->prev == null` invariant while iterating. Also added a test for this bug.
wfraser
force-pushed
the
futuresunordered-partial-iter-bugfix
branch
from
February 23, 2022 08:33
d76b9f8
to
108e569
Compare
taiki-e
approved these changes
Feb 23, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
taiki-e
added
0.3-backport: pending
The maintainer accepted to backport this to the 0.3 branch, but backport has not been done yet.
A-stream
Area: futures::stream
labels
Feb 23, 2022
taiki-e
pushed a commit
that referenced
this pull request
Aug 14, 2022
The IntoIter impl advances the head pointer every iteration, but this breaks the linked list invariant that the head's prev should be null. If the iteration is not done to completion, on subsequent drop, FuturesUnordered::unlink relies on this broken invariant and ends up panicking. The fix is to maintain the `head->prev == null` invariant while iterating. Also added a test for this bug.
Merged
taiki-e
added
0.3-backport: completed
and removed
0.3-backport: pending
The maintainer accepted to backport this to the 0.3 branch, but backport has not been done yet.
labels
Aug 14, 2022
taiki-e
pushed a commit
that referenced
this pull request
Aug 14, 2022
The IntoIter impl advances the head pointer every iteration, but this breaks the linked list invariant that the head's prev should be null. If the iteration is not done to completion, on subsequent drop, FuturesUnordered::unlink relies on this broken invariant and ends up panicking. The fix is to maintain the `head->prev == null` invariant while iterating. Also added a test for this bug.
Merged
crapStone
pushed a commit
to Calciumdibromid/CaBr2
that referenced
this pull request
Aug 23, 2022
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [futures](https://github.com/rust-lang/futures-rs) | dependencies | patch | `0.3.21` -> `0.3.23` | --- ### Release Notes <details> <summary>rust-lang/futures-rs</summary> ### [`v0.3.23`](https://github.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#​0323---2022-08-14) [Compare Source](rust-lang/futures-rs@0.3.22...0.3.23) - Work around MSRV increase due to a cargo bug. ### [`v0.3.22`](https://github.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#​0322---2022-08-14) [Compare Source](rust-lang/futures-rs@0.3.21...0.3.22) - Fix `Sync` impl of `BiLockGuard` ([#​2570](rust-lang/futures-rs#2570)) - Fix partial iteration in `FuturesUnordered` ([#​2574](rust-lang/futures-rs#2574)) - Fix false detection of inner panics in `Shared` ([#​2576](rust-lang/futures-rs#2576)) - Add `Mutex::lock_owned` and `Mutex::try_lock_owned` ([#​2571](rust-lang/futures-rs#2571)) - Add `io::copy_buf_abortable` ([#​2507](rust-lang/futures-rs#2507)) - Remove `Unpin` bound from `TryStreamExt::into_async_read` ([#​2599](rust-lang/futures-rs#2599)) - Make `run_until_stalled` handle self-waking futures ([#​2593](rust-lang/futures-rs#2593)) - Use `FuturesOrdered` in `try_join_all` ([#​2556](rust-lang/futures-rs#2556)) - Fix orderings in `LocalPool` waker ([#​2608](rust-lang/futures-rs#2608)) - Fix `stream::Chunk` adapters size hints ([#​2611](rust-lang/futures-rs#2611)) - Add `push_front` and `push_back` to `FuturesOrdered` ([#​2591](rust-lang/futures-rs#2591)) - Deprecate `FuturesOrdered::push` in favor of `FuturesOrdered::push_back` ([#​2591](rust-lang/futures-rs#2591)) - Performance improvements ([#​2583](rust-lang/futures-rs#2583), [#​2626](rust-lang/futures-rs#2626)) - Documentation improvements ([#​2579](rust-lang/futures-rs#2579), [#​2604](rust-lang/futures-rs#2604), [#​2613](rust-lang/futures-rs#2613)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xNTYuMSIsInVwZGF0ZWRJblZlciI6IjMyLjE1Ni4xIn0=--> Co-authored-by: cabr2-bot <cabr2.help@gmail.com> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1507 Reviewed-by: crapStone <crapstone@noreply.codeberg.org> Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org> Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
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.
The IntoIter impl advances the head pointer every iteration, but this breaks the linked list invariant that the head's prev should be null.
If the iteration is not done to completion (which sets head to null), on subsequent drop, FuturesUnordered::unlink relies on this broken invariant and ends up panicking.
The fix is to maintain the
head->prev == null
invariant while iterating.Fixes #2573