Skip to content

[release/9.0] Fix h3 connection-level and stream-level abort locking - #69151

Open
BrennanConroy wants to merge 1 commit into
release/9.0from
brecon/bp9
Open

[release/9.0] Fix h3 connection-level and stream-level abort locking#69151
BrennanConroy wants to merge 1 commit into
release/9.0from
brecon/bp9

Conversation

@BrennanConroy

@BrennanConroy BrennanConroy commented Sep 8, 2026

Copy link
Copy Markdown
Member

Backport of #68102 to release/9.0

/cc @BrennanConroy @cincuranet

Fix h3 connection-level and stream-level abort locking

Description

Improve server reliability when using HTTP/3.

Fixes #68101

Customer Impact

Threads can get blocked resulting in more threads being created.

Regression?

  • Yes
  • No

Risk

  • High
  • Medium
  • Low

Follows similar pattern already implemented in HTTP/2

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

Copilot AI lite review requested due to automatic review settings September 8, 2026 18:00
@BrennanConroy BrennanConroy added the area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions label Sep 8, 2026
@dotnet-policy-service dotnet-policy-service Bot added this to the 9.0.x milestone Sep 8, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hi @BrennanConroy. If this is not a tell-mode PR, please make sure to follow the instructions laid out in the servicing process document.
Otherwise, please add tell-mode label.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🔵 Needs a closer look

The change alters HTTP/3 concurrency/locking and stream lifecycle ordering in a release backport, which warrants final human review despite appearing correct.

Review tier: Lite
Findings: None

What changed in this PR

This PR backports the HTTP/3 fix from #68102 to release/9.0 to prevent deadlocks between connection-level and stream-level abort paths by reordering locking and ensuring abort side-effects complete before stream reuse/pooling.

Changes:

  • Moves HTTP/3 abort side-effects (notably _http3Output.Stop() / frame-writer abort) outside _completionLock to avoid lock-order inversion with the output producer’s writer lock.
  • Introduces an abort-completion TaskCompletionSource and awaits it during request finalization to prevent late abort side-effects from affecting a pooled/reused stream.
File Description
src/​Servers/​Kestrel/​Core/​src/​Internal/​Http3/​Http3Stream.cs Reworks abort locking and adds abort-completion synchronization before draining/disposing/pooling the underlying transport.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@BrennanConroy BrennanConroy changed the title Fix h3 connection-level and stream-level abort locking [release/9.0] Fix h3 connection-level and stream-level abort locking Sep 8, 2026
@BrennanConroy BrennanConroy added the Servicing-approved Shiproom has approved the issue label Sep 8, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hi @BrennanConroy. This PR was just approved to be included in the upcoming servicing release. Somebody from the @dotnet/aspnet-build team will get it merged when the branches are open. Until then, please make sure all the CI checks pass and the PR is reviewed.

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

Labels

area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions feature-kestrel Servicing-approved Shiproom has approved the issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants