From acb6b9bc3f2b38d3c4c90a9b54c6604d5d8b8d9d Mon Sep 17 00:00:00 2001 From: Natalia Kondratyeva Date: Fri, 30 Jul 2021 14:58:13 +0200 Subject: [PATCH] Fix QUIC stream handle leak (#56550) --- .../System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs index a6c554b5231d0..aa9c981a12202 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs @@ -1334,6 +1334,13 @@ private static uint HandleEventConnectionClose(State state) ExceptionDispatchInfo.SetCurrentStackTrace(GetConnectionAbortedException(state))); } + // Dispose was called before complete event. + bool releaseHandles = Interlocked.Exchange(ref state.ShutdownDone, 2) == 1; + if (releaseHandles) + { + state.Cleanup(); + } + return MsQuicStatusCodes.Success; }