diff --git a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs index a0b651a7f9..b4e822728b 100644 --- a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs +++ b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs @@ -752,6 +752,7 @@ namespace Tgstation.Server.Host.Components.Chat { logger.LogTrace("Starting processing loop..."); var messageTasks = new Dictionary>(); + Task activeProcessingTask = Task.CompletedTask; try { Task updatedTask = null; @@ -785,8 +786,17 @@ namespace Tgstation.Server.Host.Components.Chat { var message = await completedMessageTaskKvp.Value.ConfigureAwait(false); var messageNumber = Interlocked.Increment(ref messagesProcessed); - using (LogContext.PushProperty("ChatMessage", messageNumber)) + + async Task WrapProcessMessage() + { + var localActiveProcessingTask = activeProcessingTask; await ProcessMessage(completedMessageTaskKvp.Key, message, cancellationToken).ConfigureAwait(false); + await localActiveProcessingTask.ConfigureAwait(false); + } + + using (LogContext.PushProperty("ChatMessage", messageNumber)) + activeProcessingTask = WrapProcessMessage(); + messageTasks.Remove(completedMessageTaskKvp.Key); } } @@ -799,6 +809,10 @@ namespace Tgstation.Server.Host.Components.Chat { logger.LogError(e, "Message loop crashed!"); } + finally + { + await activeProcessingTask.ConfigureAwait(false); + } logger.LogTrace("Leaving message processing loop"); }