Skip to content

fix(http2): cancel pipe_task and send RST_STREAM on response future drop#4042

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

fix(http2): cancel pipe_task and send RST_STREAM on response future drop#4042
mmishra100 wants to merge 1 commit intohyperium:masterfrom
mmishra100:send_explicit_reset_on_response_future_drop

Conversation

@mmishra100
Copy link
Copy Markdown

When the client drops the response future (e.g. due to a timeout), send_task detects the cancellation but does not notify pipe_task. The pipe_task continues to hold the h2 SendStream, preventing a RST_STREAM from being sent and keeping flow-control window capacity locked.

Add a oneshot channel between send_task and pipe_task. When send_task detects cancellation via poll_canceled, it signals pipe_task through the channel. pipe_task then calls send_reset(CANCEL) on the h2 SendStream, which sends RST_STREAM to the server and frees flow-control capacity.

Closes #4040

When the client drops the response future (e.g. due to a timeout),
send_task detects the cancellation but does not notify pipe_task.
The pipe_task continues to hold the h2 SendStream, preventing a
RST_STREAM from being sent and keeping flow-control window capacity
locked.

Add a oneshot channel between send_task and pipe_task. When send_task
detects cancellation via poll_canceled, it signals pipe_task through
the channel. pipe_task then calls send_reset(CANCEL) on the h2
SendStream, which sends RST_STREAM to the server and frees
flow-control capacity.

Closes hyperium#4040
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.

Dropping HTTP/2 response future doesn't cancel request body send and does not send RST_STREAM

1 participant