Skip to content

Commit f28318b

Browse files
authored
[wasm] WebSocket is already disposed by after abort. (#55075)
_innerWebSocket is already disposed by after abort.
1 parent 102fc35 commit f28318b

3 files changed

Lines changed: 22 additions & 8 deletions

File tree

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,15 @@ private Task CloseAsyncCore(WebSocketCloseStatus closeStatus, string? statusDesc
574574
_innerWebSocketCloseStatus = closeStatus;
575575
_innerWebSocketCloseStatusDescription = statusDescription;
576576
_innerWebSocket!.Invoke("close", (int)closeStatus, statusDescription);
577-
_closeStatus = (int)_innerWebSocket.GetObjectProperty("readyState");
577+
if (_innerWebSocket != null && !_innerWebSocket.IsDisposed && _state != (int)InternalState.Aborted)
578+
{
579+
_closeStatus = (int)_innerWebSocket.GetObjectProperty("readyState");
580+
}
581+
else
582+
{
583+
_closeStatus = 3; // (CLOSED)
584+
}
585+
578586
return _tcsClose.Task;
579587
}
580588
catch (Exception exc)
@@ -612,7 +620,14 @@ private Task CloseOutputAsyncCore(WebSocketCloseStatus closeStatus, string? stat
612620
_innerWebSocketCloseStatus = closeStatus;
613621
_innerWebSocketCloseStatusDescription = statusDescription;
614622
_innerWebSocket!.Invoke("close", (int)closeStatus, statusDescription);
615-
_closeStatus = (int)_innerWebSocket.GetObjectProperty("readyState");
623+
if (_innerWebSocket != null && !_innerWebSocket.IsDisposed && _state != (int)InternalState.Aborted)
624+
{
625+
_closeStatus = (int)_innerWebSocket.GetObjectProperty("readyState");
626+
}
627+
else
628+
{
629+
_closeStatus = 3; // (CLOSED)
630+
}
616631
OnCloseCallback(null, cancellationToken);
617632
return Task.CompletedTask;
618633
}

src/libraries/System.Net.WebSockets.Client/tests/AbortTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class AbortTest : ClientWebSocketTestBase
1515
{
1616
public AbortTest(ITestOutputHelper output) : base(output) { }
1717

18-
[OuterLoop]
18+
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
1919
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
2020
public async Task Abort_ConnectAndAbort_ThrowsWebSocketExceptionWithmessage(Uri server)
2121
{
@@ -40,7 +40,7 @@ public async Task Abort_ConnectAndAbort_ThrowsWebSocketExceptionWithmessage(Uri
4040
}
4141
}
4242

43-
[OuterLoop]
43+
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
4444
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
4545
public async Task Abort_SendAndAbort_Success(Uri server)
4646
{
@@ -60,7 +60,7 @@ await TestCancellation(async (cws) =>
6060
}, server);
6161
}
6262

63-
[OuterLoop]
63+
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
6464
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
6565
public async Task Abort_ReceiveAndAbort_Success(Uri server)
6666
{
@@ -84,7 +84,7 @@ await cws.SendAsync(
8484
}, server);
8585
}
8686

87-
[OuterLoop]
87+
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
8888
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
8989
public async Task Abort_CloseAndAbort_Success(Uri server)
9090
{
@@ -108,7 +108,7 @@ await cws.SendAsync(
108108
}, server);
109109
}
110110

111-
[OuterLoop]
111+
[OuterLoop("Uses external servers", typeof(PlatformDetection), nameof(PlatformDetection.LocalEchoServerIsNotAvailable))]
112112
[ConditionalTheory(nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
113113
public async Task ClientWebSocket_Abort_CloseOutputAsync(Uri server)
114114
{

src/libraries/System.Net.WebSockets.Client/tests/ConnectTest.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@ public async Task ConnectAsync_CancellationRequestedInflightConnect_ThrowsOperat
282282

283283
[ConditionalFact(nameof(WebSocketsSupported))]
284284
[ActiveIssue("https://github.com/dotnet/runtime/issues/34690", TestPlatforms.Windows, TargetFrameworkMonikers.Netcoreapp, TestRuntimes.Mono)]
285-
[ActiveIssue("https://github.com/dotnet/runtime/issues/54152", TestPlatforms.Browser)]
286285
public async Task ConnectAsync_CancellationRequestedAfterConnect_ThrowsOperationCanceledException()
287286
{
288287
var releaseServer = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);

0 commit comments

Comments
 (0)