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); } } }