Skip to content

Commit cc47745

Browse files
Merge pull request #1262 from Turnerj/add-logging-on-writeloop
Add exception logging on WriteLoop
2 parents 9f29079 + 4375a73 commit cc47745

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

projects/RabbitMQ.Client/client/impl/SocketFrameHandler.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -286,21 +286,29 @@ public void Write(ReadOnlyMemory<byte> memory)
286286

287287
private async Task WriteLoop()
288288
{
289-
while (await _channelReader.WaitToReadAsync().ConfigureAwait(false))
289+
try
290290
{
291-
while (_channelReader.TryRead(out ReadOnlyMemory<byte> memory))
291+
while (await _channelReader.WaitToReadAsync().ConfigureAwait(false))
292292
{
293-
MemoryMarshal.TryGetArray(memory, out ArraySegment<byte> segment);
293+
while (_channelReader.TryRead(out ReadOnlyMemory<byte> memory))
294+
{
295+
MemoryMarshal.TryGetArray(memory, out ArraySegment<byte> segment);
294296
#if NETSTANDARD
295-
await _writer.WriteAsync(segment.Array, segment.Offset, segment.Count).ConfigureAwait(false);
297+
await _writer.WriteAsync(segment.Array, segment.Offset, segment.Count).ConfigureAwait(false);
296298
#else
297-
await _writer.WriteAsync(memory).ConfigureAwait(false);
299+
await _writer.WriteAsync(memory).ConfigureAwait(false);
298300
#endif
299-
RabbitMqClientEventSource.Log.CommandSent(segment.Count);
300-
ArrayPool<byte>.Shared.Return(segment.Array);
301-
}
301+
RabbitMqClientEventSource.Log.CommandSent(segment.Count);
302+
ArrayPool<byte>.Shared.Return(segment.Array);
303+
}
302304

303-
await _writer.FlushAsync().ConfigureAwait(false);
305+
await _writer.FlushAsync().ConfigureAwait(false);
306+
}
307+
}
308+
catch (Exception ex)
309+
{
310+
ESLog.Error("Background socket write loop has crashed", ex);
311+
throw;
304312
}
305313
}
306314

0 commit comments

Comments
 (0)