Skip to content

fix: send RST_STREAM immediately for CANCEL resets (#880)#881

Open
mmishra100 wants to merge 1 commit intohyperium:masterfrom
mmishra100:implicit_rst_stream_fix
Open

fix: send RST_STREAM immediately for CANCEL resets (#880)#881
mmishra100 wants to merge 1 commit intohyperium:masterfrom
mmishra100:implicit_rst_stream_fix

Conversation

@mmishra100
Copy link
Copy Markdown

When an implicit CANCEL reset is scheduled (both ResponseFuture and SendStream dropped), pop_frame() tried to drain buffered DATA through flow control before producing the RST_STREAM. If the send window was exhausted the DATA could never drain, so the RST_STREAM was never sent.

Now pop_frame() discards buffered DATA and sends RST_STREAM immediately for CANCEL resets. NO_ERROR resets still drain their data first, since they follow a complete response (RFC 9113 §8.1).

When an implicit CANCEL reset is scheduled (both ResponseFuture and
SendStream dropped), pop_frame() tried to drain buffered DATA through
flow control before producing the RST_STREAM. If the send window was
exhausted the DATA could never drain, so the RST_STREAM was never sent.

Now pop_frame() discards buffered DATA and sends RST_STREAM immediately
for CANCEL resets. NO_ERROR resets still drain their data first, since
they follow a complete response (RFC 9113 §8.1).
// and requires all queued data to be sent first.
//
// See https://github.com/hyperium/h2/issues/880.
if stream.state.get_scheduled_reset() == Some(Reason::CANCEL) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I appreciate the comments just above pointing out that NO_ERROR likely should keep sending. But, I'm wondering, is CANCEL the only reason to drop all the data? Shouldn't any other reset tear it all down?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants