fix pin violation in much of concurrentstream #187
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.
Fixes #182
I developed the crate
futures-buffered
a couple years ago with the intent of being a more efficient 'FuturesUnordered' type than the one infutures_util
.The core of the unsoundness in #182 are the pin-violations caused by FutureGroup slab reallocs.
futures-buffered
solves this by using a 'triangular array' pattern, where each subsequent realloc is actually a new slab.Note: the unsoundness still exists in FutureGroup.
futures-buffered
does not return keys for entries (although that is not a bad idea) so the API is not compatible.A quick soundness fix for FutureGroup would be to make
Stream
requireF: Unpin
, albeit this is a breaking change.Even if you do not merge this change, I hope it serves as a nice inspiration for you :)