Skip to content

Commit dfd3cc0

Browse files
[browser] Fix double dispose of GCHandle in BrowserWebSocket (#113464)
Co-authored-by: pavelsavara <[email protected]>
1 parent b5bc93b commit dfd3cc0

File tree

1 file changed

+3
-8
lines changed
  • src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets

1 file changed

+3
-8
lines changed

src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets/BrowserWebSocket.cs

+3-8
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ private async Task SendAsyncCore(ArraySegment<byte> buffer, WebSocketMessageType
399399

400400
if (sendTask != null) // this is optimization for single-threaded build, see resolvedPromise() in web-socket.ts. Null means synchronously resolved.
401401
{
402-
await CancellationHelper(sendTask, cancellationToken, previousState, pinBuffer).ConfigureAwait(false);
402+
await CancellationHelper(sendTask, cancellationToken, previousState).ConfigureAwait(false);
403403
}
404404
}
405405
catch (JSException ex)
@@ -442,7 +442,7 @@ private async Task<WebSocketReceiveResult> ReceiveAsyncCore(ArraySegment<byte> b
442442

443443
if (receiveTask != null) // this is optimization for single-threaded build, see resolvedPromise() in web-socket.ts. Null means synchronously resolved.
444444
{
445-
await CancellationHelper(receiveTask, cancellationToken, previousState, pinBuffer).ConfigureAwait(false);
445+
await CancellationHelper(receiveTask, cancellationToken, previousState).ConfigureAwait(false);
446446
}
447447

448448
return ConvertResponse();
@@ -550,13 +550,12 @@ private async Task CloseAsyncCore(WebSocketCloseStatus closeStatus, string? stat
550550
}
551551
}
552552

553-
private async Task CancellationHelper(Task promise, CancellationToken cancellationToken, WebSocketState previousState, IDisposable? disposable = null)
553+
private async Task CancellationHelper(Task promise, CancellationToken cancellationToken, WebSocketState previousState)
554554
{
555555
try
556556
{
557557
if (promise.IsCompletedSuccessfully)
558558
{
559-
disposable?.Dispose();
560559
return;
561560
}
562561
if (promise.IsCompleted)
@@ -602,10 +601,6 @@ private async Task CancellationHelper(Task promise, CancellationToken cancellati
602601
throw new WebSocketException(WebSocketError.NativeError, ex);
603602
}
604603
}
605-
finally
606-
{
607-
disposable?.Dispose();
608-
}
609604
}
610605

611606
// needs to be called with locked _lockObject

0 commit comments

Comments
 (0)