Skip to content

Commit 4ef4e02

Browse files
sunghwan2789michaelstaib
authored andcommitted
Fixed websockets message corruption after cancellation (#7768)
1 parent 9a9d0ca commit 4ef4e02

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/StrawberryShake/Client/src/Transport.WebSockets/Messaging/SynchronizedMessageWriter.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ public async ValueTask CommitAsync(
3131
Action<SocketMessageWriter> action,
3232
CancellationToken cancellationToken)
3333
{
34+
await _semaphore
35+
.WaitAsync(cancellationToken)
36+
.ConfigureAwait(false);
37+
3438
try
3539
{
36-
await _semaphore
37-
.WaitAsync(cancellationToken)
38-
.ConfigureAwait(false);
39-
4040
_socketMessageWriter.Reset();
4141
action.Invoke(_socketMessageWriter);
4242

src/StrawberryShake/Client/test/Transport.WebSocket.Tests/Messaging/SynchronizedMessageWriterTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ public async Task WriteObject_EmptyBuffer_ObjectParallel()
3030
await using var writer = new SynchronizedMessageWriter(socketClient);
3131

3232
// act
33+
var canceled = writer.CommitAsync(x =>
34+
{
35+
x.WriteStartObject();
36+
x.WriteEndObject();
37+
},
38+
new(true));
39+
Assert.True(canceled.IsCanceled);
40+
3341
List<Task> tasks = [];
3442
for (var i = 0; i < 10; i++)
3543
{

0 commit comments

Comments
 (0)