From a3a09f16086b0f88a067efa4dfd7335f6a30f548 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 24 Aug 2021 10:45:29 -0400 Subject: [PATCH] Fix issues with rare Remora bug --- .../Components/Chat/Providers/DiscordProvider.cs | 14 ++++++++------ .../Chat/Providers/TestDiscordProvider.cs | 13 ------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index f73c371c7d..cfeb7a31df 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -603,9 +603,11 @@ namespace Tgstation.Server.Host.Components.Chat.Providers await Task.WhenAny(gatewayReadyTcs.Task, gatewayTask).ConfigureAwait(false); } - if (gatewayTask.IsCompleted) + if (gatewayTask.IsCompleted || cancellationToken.IsCancellationRequested) { - await DisconnectImpl(cancellationToken).ConfigureAwait(false); + // DCT: Musn't abort + await DisconnectImpl(default).ConfigureAwait(false); + cancellationToken.ThrowIfCancellationRequested(); throw new JobException(ErrorCode.ChatCannotConnectProvider); } @@ -618,8 +620,9 @@ namespace Tgstation.Server.Host.Components.Chat.Providers Logger.LogWarning("Unable to retrieve current user: {0}", currentUserResult.Error.Message); // will handle cleanup - await DisconnectImpl(cancellationToken).ConfigureAwait(false); - + // DCT: Musn't abort + await DisconnectImpl(default).ConfigureAwait(false); + cancellationToken.ThrowIfCancellationRequested(); throw new JobException(ErrorCode.ChatCannotConnectProvider); } @@ -627,8 +630,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers } catch (OperationCanceledException) { - if (gatewayTask != null) - await DisconnectImpl(default).ConfigureAwait(false); // DCT: Musn't abort + throw; } catch (Exception e) { diff --git a/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs index 62579ddc25..1ce1802e40 100644 --- a/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs +++ b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs @@ -85,19 +85,6 @@ namespace Tgstation.Server.Host.Components.Chat.Providers.Tests await provider.Disconnect(default).ConfigureAwait(false); Assert.IsFalse(provider.Connected); - - //now try it with cancellationTokens - using var cts = new CancellationTokenSource(); - cts.Cancel(); - var cancellationToken = cts.Token; - await Assert.ThrowsExceptionAsync(() => InvokeConnect(provider, cancellationToken)).ConfigureAwait(false); - Assert.IsFalse(provider.Connected); - await InvokeConnect(provider).ConfigureAwait(false); - Assert.IsTrue(provider.Connected); - await Assert.ThrowsExceptionAsync(() => provider.Disconnect(cancellationToken)).ConfigureAwait(false); - Assert.IsTrue(provider.Connected); - await provider.Disconnect(default).ConfigureAwait(false); - Assert.IsFalse(provider.Connected); } } }