fix: MeasureManyStream now properly terminates#4
Merged
paolobarbolini merged 2 commits intoM4SS-Code:mainfrom Jan 23, 2026
Merged
fix: MeasureManyStream now properly terminates#4paolobarbolini merged 2 commits intoM4SS-Code:mainfrom
paolobarbolini merged 2 commits intoM4SS-Code:mainfrom
Conversation
Member
Author
|
This PR also includes the changes from #2 currently while we wait for that to be merged. |
ThinkerDreamer
commented
Jan 22, 2026
8c27ac7 to
db82ecc
Compare
db82ecc to
3a1521b
Compare
The stream now returns None when all ping requests have been sent and all responses received. Previously, poll_next_unpin would return Poll::Pending forever after processing all results, causing while let loops to hang indefinitely. Changes: - poll_next_unpin now returns Poll<Option<...>> instead of Poll<...> - Added completion check: when send_queue is empty AND in_flight is empty, return Poll::Ready(None) - Updated Stream impl to pass through the Option directly - Added v4_done/v6_done flags to DualstackMeasureManyStream to track completion state of both underlying streams - Removed unused task::ready imports Closes M4SS-Code#3
Tests verify that MeasureManyStream properly returns None when: - Single ping completes - Multiple pings to different addresses complete - Empty address list is provided Tests run on both current_thread and multi_thread runtimes.
3a1521b to
87895f3
Compare
dodomorandi
approved these changes
Jan 23, 2026
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.
Summary
MeasureManyStreamnow returnsNonewhen all pings complete, allowingwhile letloops to exitv4_done/v6_donetracking toDualstackMeasureManyStreamfor proper completionProblem
The stream never returned
Noneto signal completion. After all ping responses were received,poll_next_unpinwould returnPoll::Pendingforever, causingwhile let Some(...) = stream.next().awaitloops to hang indefinitely.Solution
poll_next_unpinreturn type fromPoll<(V, Duration)>toPoll<Option<(V, Duration)>>send_queueis empty ANDin_flightis empty, returnPoll::Ready(None)Streamimpl to pass through theOptiondirectlyDualstackMeasureManyStreamTest plan
current_threadandmulti_threadruntimesCloses #3