diff --git a/dotnet/src/webdriver/BiDi/WebSocketTransport.cs b/dotnet/src/webdriver/BiDi/WebSocketTransport.cs index 77a6a7d7ba1b3..76b52bec55aad 100644 --- a/dotnet/src/webdriver/BiDi/WebSocketTransport.cs +++ b/dotnet/src/webdriver/BiDi/WebSocketTransport.cs @@ -33,8 +33,6 @@ sealed class WebSocketTransport(Uri _uri) : ITransport, IDisposable private readonly static ILogger _logger = Internal.Logging.Log.GetLogger(); private readonly ClientWebSocket _webSocket = new(); - private byte[] _receiveBuffer = ArrayPool.Shared.Rent(1024 * 8); - private readonly SemaphoreSlim _socketSendSemaphoreSlim = new(1, 1); private readonly MemoryStream _sharedMemoryStream = new(); @@ -45,28 +43,37 @@ public async Task ConnectAsync(CancellationToken cancellationToken) public async Task ReceiveAsync(CancellationToken cancellationToken) { - _sharedMemoryStream.SetLength(0); + var receiveBuffer = ArrayPool.Shared.Rent(1024 * 8); - ArraySegment segment = new(_receiveBuffer); + try + { + _sharedMemoryStream.SetLength(0); - WebSocketReceiveResult result; + ArraySegment segment = new(receiveBuffer); - do - { - result = await _webSocket.ReceiveAsync(segment, cancellationToken).ConfigureAwait(false); + WebSocketReceiveResult result; - _sharedMemoryStream.Write(segment.Array!, segment.Offset, result.Count); - } - while (!result.EndOfMessage); + do + { + result = await _webSocket.ReceiveAsync(segment, cancellationToken).ConfigureAwait(false); - byte[] data = _sharedMemoryStream.ToArray(); + _sharedMemoryStream.Write(receiveBuffer, 0, result.Count); + } + while (!result.EndOfMessage); + + byte[] data = _sharedMemoryStream.ToArray(); + + if (_logger.IsEnabled(LogEventLevel.Trace)) + { + _logger.Trace($"BiDi RCV <-- {Encoding.UTF8.GetString(data)}"); + } - if (_logger.IsEnabled(LogEventLevel.Trace)) + return data; + } + finally { - _logger.Trace($"BiDi RCV <-- {Encoding.UTF8.GetString(data)}"); + ArrayPool.Shared.Return(receiveBuffer); } - - return data; } public async Task SendAsync(byte[] data, CancellationToken cancellationToken) @@ -96,11 +103,6 @@ public void Dispose() GC.SuppressFinalize(this); } - ~WebSocketTransport() - { - Dispose(false); - } - private void Dispose(bool disposing) { if (_disposed) @@ -115,13 +117,6 @@ private void Dispose(bool disposing) _socketSendSemaphoreSlim.Dispose(); } - if (_receiveBuffer is not null) - { - ArrayPool.Shared.Return(_receiveBuffer); - - _receiveBuffer = null!; - } - _disposed = true; } }