Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cherry-pick 3041 to master #3049

Merged
merged 1 commit into from Nov 7, 2022
Merged

Cherry-pick 3041 to master #3049

merged 1 commit into from Nov 7, 2022

Conversation

seanmonstar
Copy link
Member

This cherry-picks the fix for the HTTP/2 concurrency race condition from #3041.

There exists a race condition in ClientTask::poll() when the request
that is sent via h2::client::send_request() is pending open. A task will
be spawned to wait for send capacity on the sendstream. Because this
same stream is also stored in the pending member of
h2::client::SendRequest the next iteration of the poll() loop can call
poll_ready() and call wait_send() on the same stream passed into the
spawned task.

Fix this by always calling poll_ready() after send_request(). If this
call to poll_ready() returns Pending save the necessary context in
ClientTask and only spawn the task that will eventually resolve to the
response after poll_ready() returns Ok.
@seanmonstar seanmonstar merged commit f202230 into master Nov 7, 2022
@seanmonstar seanmonstar deleted the cherry-http2-race-lock branch November 7, 2022 20:53
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.

None yet

3 participants