Put in a smidge of elbow grease to reduce excess GREASE - #362
Open
arrimorris wants to merge 1 commit into
Open
Conversation
Currently, the send_grease_frame flag is only cleared inside Connection::accept(). However, third-party backends and embedders (like hyper) that require fine-grained async control use the i-implement-a-third-party-backend... feature to bypass accept() and drive the connection via poll_accept_request_stream_internal(). Since embedders bypass accept(), the send_grease_frame flag is never cleared. No bueno. By moving this state toggle down into create_resolver_internal, the GREASE frame is correctly sent exactly once per connection, regardless of whether the user calls the high-level accept() or the low-level poll_accept... API.
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.
Currently, the
send_grease_frameflag is only cleared insideConnection::accept(). However, third-party backends and embedders (likehyper) that require fine-grained async control use the i-implement-a-third-party-backend... feature to bypassaccept()and drive the connection viapoll_accept_request_stream_internal(). Since embedders bypass accept(), the send_grease_frame flag is never cleared. No bueno.By moving this toggle down into
create_resolver_internal, the GREASE frame is correctly sent once per connection, regardless of whether we call the high-level accept() or the low-level poll_accept_request_stream_internal() API.