From e487cf4943b391df2b1267acc215eaf408327527 Mon Sep 17 00:00:00 2001 From: pedrobsaila Date: Wed, 13 Nov 2024 21:58:52 +0100 Subject: [PATCH 1/2] System.Net.Http.WinHttpHandler.StartRequestAsync assertion failed --- .../src/System/Net/Http/WinHttpHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs b/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs index e0cbf738b019ec..da0d5ddd862393 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs @@ -545,7 +545,7 @@ protected override void Dispose(bool disposing) if (disposing && _sessionHandle != null) { - SafeWinHttpHandle.DisposeAndClearHandle(ref _sessionHandle); + _sessionHandle.Dispose(); } } From e33125c6b2a985f0172a17d3490e3acf1864bd6a Mon Sep 17 00:00:00 2001 From: pedrobsaila Date: Sun, 2 Feb 2025 14:12:33 +0100 Subject: [PATCH 2/2] fix remarks --- .../src/System/Net/Http/WinHttpHandler.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs b/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs index f980578a599a81..2b9a7375d9963c 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/src/System/Net/Http/WinHttpHandler.cs @@ -90,7 +90,7 @@ private Func< private int _maxResponseDrainSize = HttpHandlerDefaults.DefaultMaxResponseDrainSize; private IDictionary? _properties; // Only create dictionary when required. private volatile bool _operationStarted; - private volatile bool _disposed; + private volatile int _disposed; private SafeWinHttpHandle? _sessionHandle; private readonly WinHttpAuthHelper _authHelper = new WinHttpAuthHelper(); @@ -539,10 +539,8 @@ public bool EnableMultipleHttp2Connections protected override void Dispose(bool disposing) { - if (!_disposed) + if (Interlocked.CompareExchange(ref _disposed, 1, 0) == 0) { - _disposed = true; - if (disposing && _sessionHandle != null) { _sessionHandle.Dispose(); @@ -1033,7 +1031,7 @@ private async Task StartRequestAsync(WinHttpRequestState state) } finally { - SafeWinHttpHandle.DisposeAndClearHandle(ref connectHandle); + connectHandle?.Dispose(); try { @@ -1620,7 +1618,7 @@ private void SetOperationStarted() private void CheckDisposed() { - if (_disposed) + if (_disposed == 1) { throw new ObjectDisposedException(GetType().FullName); }