Skip to content

[SignalR] Fix CTS disposal - #69158

Merged
wtgodbe merged 1 commit into
release/11.0from
brecon/cts
Sep 10, 2026
Merged

wtgodbe merged 1 commit into
release/11.0from
brecon/cts

Conversation

@BrennanConroy

@BrennanConroy BrennanConroy commented Sep 8, 2026 •

Copy link
Copy Markdown
Member

[SignalR] Fix CTS disposal- #69158

Description

When we added cancellation support for non-streaming methods, we didn't dispose the CTS in error cases.

Customer Impact

Fixes a server reliability issue.

Regression?

  • Yes
  • No

Regressed in 11.0-p6

Risk

  • High
  • Medium
  • Low

Simple change, just missed an error case

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

Copilot AI lite review requested due to automatic review settings September 8, 2026 23:31
@BrennanConroy BrennanConroy added the area-signalr Includes: SignalR clients and servers label Sep 8, 2026

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

🟢 Approval recommended

The change is small, localized, and fixes a concrete CTS disposal leak without altering the normal streaming or cleanup flow.

Review tier: Lite
Findings: None

What changed in this PR

Fixes a CancellationTokenSource lifetime leak in SignalR’s DefaultHubDispatcher streaming invocation path by ensuring the CTS is disposed when an invocation ID collision prevents it from being registered.

Changes:

  • Dispose streamCts when ActiveRequestCancellationSources.TryAdd(invocationId, streamCts) fails due to an invocation ID already being in use.
  • Minor file-end formatting cleanup.
File Description
src/​SignalR/​server/​Core/​src/​Internal/​DefaultHubDispatcher.cs Ensures CTS is disposed on invocation ID collision in StreamAsync to avoid leaking linked CTS instances.

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

@Youssef1313 Youssef1313 added the Servicing-consider Shiproom approval is required for the issue label Sep 9, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hi @BrennanConroy. Please make sure you've updated the PR description to use the Shiproom Template. Also, make sure this PR is not marked as a draft and is ready-to-merge.

To learn more about how to prepare a servicing PR click here.

Comment thread src/SignalR/server/Core/src/Internal/DefaultHubDispatcher.cs
@artl93
artl93 self-requested a review September 9, 2026 06:36

@artl93 artl93 left a comment

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.

Dispose. Regression. Approved.

@artl93 artl93 added Servicing-approved Shiproom has approved the issue and removed Servicing-consider Shiproom approval is required for the issue labels Sep 9, 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.

@wtgodbe
wtgodbe merged commit 3563a8e into release/11.0 Sep 10, 2026
50 checks passed
@wtgodbe
wtgodbe deleted the brecon/cts branch September 10, 2026 18:48
@dotnet-milestone-bot dotnet-milestone-bot Bot added this to the 11.0-rc2 milestone Sep 10, 2026
wtgodbe added a commit that referenced this pull request Sep 16, 2026
* [SignalR] Fix CTS disposal (#69158)

* Fix: hardening http2 to refuse newline chars on trailers and dynamic HPACK table (#68743)

* Hardening trailers to refuse new line chars

* Hardening HPACK dynamic header to refuse new line chars

* Http3 request trailers with newline chars test

* Added test to exercise newline chars on indexed headers

* Fix flaky HTTP/3 request trailers test

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* [SignalR] [Java] Fix hang when reading an HTTP response body fails (#69037) (#69206)

Co-authored-by: Brennan <brecon@microsoft.com>

* Add AggressiveOptimization to key long-running async methods (#69287)

* [DirectTLS] [release/11.0] exclude experimental transport from release 11 (#69144)

* Revert "Run DirectTls handshake user callbacks off the epoll pump thread (#68664)"

This reverts commit 49e0516.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Revert "[Experimental] DirectTls transport implementation (#67912)"

This reverts commit 07d11eb.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Apply suggestion from @DeagleGross

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Update dependencies from https://github.com/dotnet/extensions build 20260909.4 (#69269)

On relative base path root
Microsoft.Extensions.Caching.Hybrid , Microsoft.Extensions.Diagnostics.Testing , Microsoft.Extensions.ServiceDiscovery , Microsoft.Extensions.ServiceDiscovery.Yarp , Microsoft.Extensions.TimeProvider.Testing From Version 10.9.0 -> To Version 10.10.0

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* [release/11.0] Source code updates from dotnet/dotnet (#69256)

* Backflow from https://github.com/dotnet/dotnet / e775569 build 331727

Diff: https://github.com/dotnet/dotnet/compare/48e3f46c03e3ed36611a49fd7107330dade9f7c8..e775569ca8ce94c363d910311f5f889e648ddc23

From: dotnet/dotnet@48e3f46
To: dotnet/dotnet@e775569

[[ commit created by automation ]]

* Update dependencies from build 331727
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.Cryptography, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-rc.2.26458.109 -> 11.0.0-rc.2.26461.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.JobMonitor, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26458.109 -> 11.0.0-beta.26461.110)
Microsoft.Web.Xdt (Version 3.3.0-rc.2.26458.109 -> 3.3.0-rc.2.26461.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.12.0-rc.45909 -> 7.12.0-rc.46210)
[[ commit created by automation ]]

* Fix authorization component Razor compilation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test(iis): scope upgrade MaxRequestBodySize assert to in-process hosting

- in-process must clear the limit on upgrade because its read loop enforces it
- out-of-process runs on Kestrel, which never enforces it once upgraded
- unblocks the three WebSocketsOutOfProcessTests failures

🧪 - Generated by Copilot

(cherry picked from commit befb2e9)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: William Godbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Roman Konecny <rokonecn@microsoft.com>

* Remove experimental DirectTLS transport

Carry the release/11.0 removal from #69144 into main while preserving the other auto-merge conflict resolutions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Brennan <brecon@microsoft.com>
Co-authored-by: Alan Morais Fialho <51328556+amf-fs@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com>
Co-authored-by: Sam Patel <46026722+SamMonoRT@users.noreply.github.com>
Co-authored-by: Korolev Dmitry <dmkorolev@microsoft.com>
Co-authored-by: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: William Godbe <wigodbe@microsoft.com>
Co-authored-by: Roman Konecny <rokonecn@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-signalr Includes: SignalR clients and servers Servicing-approved Shiproom has approved the issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants