Skip to content

Commit e2c319a

Browse files
authored
[android][ios] Fix dispose problem with NativeHttpHandlers (#93262)
#90298 made sure the MetricsHandler was the top level handler for all NativeHttpHandler requests similar to what is done with SocketsHttpHandler. After creating the MetricsHandler, the code mistakenly disposed of `_nativeHandler`, which resulted in `Dispose` being called multiple times and eventually throwing a `Cannot access a disposed object` exception. Fixes #93252
1 parent 53830e2 commit e2c319a

File tree

1 file changed

+2
-5
lines changed

1 file changed

+2
-5
lines changed

src/libraries/System.Net.Http/src/System/Net/Http/HttpClientHandler.AnyMobile.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ private HttpMessageHandler Handler
5151
MetricsHandler metricsHandler = new MetricsHandler(handler, _nativeMeterFactory, out _);
5252

5353
// Ensure a single handler is used for all requests.
54-
if (Interlocked.CompareExchange(ref _nativeMetricsHandler, metricsHandler, null) != null)
55-
{
56-
handler.Dispose();
57-
}
54+
Interlocked.CompareExchange(ref _nativeMetricsHandler, metricsHandler, null);
5855
}
5956

6057
return _nativeMetricsHandler;
@@ -87,7 +84,7 @@ protected override void Dispose(bool disposing)
8784

8885
if (IsNativeHandlerEnabled)
8986
{
90-
_nativeHandler!.Dispose();
87+
Handler.Dispose();
9188
}
9289
else
9390
{

0 commit comments

Comments
 (0)