Repository navigation
[SignalR] Fix CTS disposal - #69158
Conversation
There was a problem hiding this comment.
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
streamCtswhenActiveRequestCancellationSources.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.
|
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. |
artl93
left a comment
There was a problem hiding this comment.
Dispose. Regression. Approved.
|
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. |
* [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>
[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?
Regressed in 11.0-p6
Risk
Simple change, just missed an error case
Verification
Packaging changes reviewed?