From 19d2d750750eada504775331c5cc1dee4c7c3c62 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 5 Oct 2021 16:16:47 -0400 Subject: [PATCH] Fix NullReferenceException on ChatManager shutdown --- src/Tgstation.Server.Host/Components/Chat/ChatManager.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs index 3e2851e5c4..b5f105ea3e 100644 --- a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs +++ b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs @@ -593,16 +593,20 @@ namespace Tgstation.Server.Host.Components.Chat } // map the channel if it's private and we haven't seen it + var providerChannelId = message.User.Channel.RealId; KeyValuePair? mappedChannel; long providerId; lock (providers) { + // important, otherwise we could end up processing during shutdown + cancellationToken.ThrowIfCancellationRequested(); + providerId = providers .Where(x => x.Value == provider) .Select(x => x.Key) .First(); mappedChannel = mappedChannels - .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == message.User.Channel.RealId) + .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == providerChannelId) .FirstOrDefault(); } @@ -648,7 +652,8 @@ namespace Tgstation.Server.Host.Components.Chat return; } - var mapping = mappedChannel.Value.Value; + var mappingNonNullableKvp = mappedChannel.Value; + var mapping = mappingNonNullableKvp.Value; message.User.Channel.Id = mapping.Channel.Id; message.User.Channel.Tag = mapping.Channel.Tag;