Repository navigation
fix(http1): flush the response before handing the connection to an upgrade - #4233
Open
FalkWoldmann wants to merge 1 commit into
Open
FalkWoldmann wants to merge 1 commit into
FalkWoldmann wants to merge 1 commit into
Conversation
FalkWoldmann
force-pushed
the
fix/h1-upgrade-flush
branch
7 times, most recently
from
October 14, 2026 20:33
0ae6271 to
489ebee
Compare
…grade The hand-off drops the write buffer, so a 101 can get cut off when the read side closes before the flush is done, for example when the service dropped a request body that had not arrived yet.
FalkWoldmann
force-pushed
the
fix/h1-upgrade-flush
branch
from
October 14, 2026 20:42
489ebee to
7042ee2
Compare
This branch has not been deployed
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.
Hi, nothing urgent, this only shows up in an edge case, but the fix is small :)
The dispatcher hands the IO off to an upgrade (same for
without_shutdown()) before the write buffer is flushed, andinto_innerjust drops that buffer. Normally that's fine, since for a 101 it's the flush finishing that closes the read side. But when something else closes it first, likepoll_drain_or_close_readwhen the service dropped a request body that hadn't arrived yet, the peer gets a cut-off 101 with the upgraded bytes right behind it. The flush before the hand-off is the same thingpoll_shutdownalready does. On master the new test getsHTTP/1.1foo=bar