Fix(http): Release the underlying connection when an AbortableRequest is aborted before its body is read#1935
Open
hasanmhallak wants to merge 2 commits into
Open
Conversation
underlying connection when an AbortableRequest is aborted before its body is read dart-lang#1934 Update CHANGLOG
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.
After
sendreturns,IOClientowns thedart:ioHttpClientResponsebut subscribed to it lazily — only when the wrapper stream was listened to. Aborting in the window between "response received" and "body listened" closed the wrapper without ever touching the native response, sodart:iokept the connection open waiting for a body no one would read. With a bounded pool, the next request hung until timeout.Abort after
pipeis now handled by a singleabortResponsethat covers all three states:RequestAbortedExceptionand cancel the live subscription.The wrapper still emits
RequestAbortedExceptionand closes. The body is destroyed, not drained.Tests
aborting without reading the response frees the underlying connectionaborting after the response is fully read raises no async erroraborting while streaming frees the connectionFixes #1934
Contribution guidelines:
dart format.Many Dart repos have a weekly cadence for reviewing PRs - please allow for some latency before initial review feedback.
Note: The Dart team is trialing Gemini Code Assist. Don't take its comments as final Dart team feedback. Use the suggestions if they're helpful; otherwise, wait for a human reviewer.