From 0e4f78a5c247c4c410c78ee3ee160a1ab2879966 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 11 Jun 2020 16:13:06 -0400 Subject: [PATCH 1/3] Fix cross instance chat bot leak --- src/Tgstation.Server.Host/Controllers/ChatController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Controllers/ChatController.cs b/src/Tgstation.Server.Host/Controllers/ChatController.cs index 153406d210..619d4c3620 100644 --- a/src/Tgstation.Server.Host/Controllers/ChatController.cs +++ b/src/Tgstation.Server.Host/Controllers/ChatController.cs @@ -197,7 +197,7 @@ namespace Tgstation.Server.Host.Controllers { var query = DatabaseContext.ChatBots .AsQueryable() - .Where(x => x.Id == id) + .Where(x => x.Id == id && x.InstanceId == Instance.Id) .Include(x => x.Channels); var results = await query.FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); From 750fe3c2613aeedc66e7eceaa82c307b7987415c Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 11 Jun 2020 18:14:01 -0400 Subject: [PATCH 2/3] Fix potential shutdown deadlock - Prevent deadlock related to chat bot automatic reconnection --- .../Components/Chat/Providers/DiscordProvider.cs | 2 +- .../Components/Chat/Providers/IProvider.cs | 2 +- .../Components/Chat/Providers/IrcProvider.cs | 2 +- .../Components/Chat/Providers/Provider.cs | 13 ++++++++++++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index ba23173db1..b2b5c7c86c 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -177,7 +177,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers } /// - public override async Task Disconnect(CancellationToken cancellationToken) + protected override async Task DisconnectImpl(CancellationToken cancellationToken) { Logger.LogTrace("Disconnecting..."); if (!Connected) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs index c06c22844f..cca006f663 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs @@ -37,7 +37,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers Task Connect(CancellationToken cancellationToken); /// - /// Gracefully disconnects the provider. Implies a call to + /// Gracefully disconnects the provider. Permanently stops the reconnection timer. /// /// The for the operation /// A representing the running operation diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs index 67e85e152a..014a5d9d63 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs @@ -346,7 +346,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current); /// - public override async Task Disconnect(CancellationToken cancellationToken) + protected override async Task DisconnectImpl(CancellationToken cancellationToken) { if (!Connected) return; diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs index 9f686bedca..070db5a8ef 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs @@ -87,8 +87,19 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// public abstract Task Connect(CancellationToken cancellationToken); + /// + /// Gracefully disconnects the provider. + /// + /// The for the operation. + /// A representing the running operation. + protected abstract Task DisconnectImpl(CancellationToken cancellationToken); + /// - public abstract Task Disconnect(CancellationToken cancellationToken); + public async Task Disconnect(CancellationToken cancellationToken) + { + await StopReconnectionTimer().ConfigureAwait(false); + await DisconnectImpl(cancellationToken).ConfigureAwait(false); + } /// public abstract Task> MapChannels(IEnumerable channels, CancellationToken cancellationToken); From 9b9ecd622388f183869669e53f14173d1eea969f Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 11 Jun 2020 18:15:36 -0400 Subject: [PATCH 3/3] Version bump to 4.3.3 --- build/Version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/Version.props b/build/Version.props index 2a24e56613..4ed6782372 100644 --- a/build/Version.props +++ b/build/Version.props @@ -2,7 +2,7 @@ - 4.3.2 + 4.3.3 6.6.0 7.2.0 5.2.2