From 9fcf608370768845a21794b5a5b9cd64f2780e43 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 4 May 2020 03:21:13 -0400 Subject: [PATCH] Fix possible suspension issues with windows watchdog --- .../Components/Watchdog/WindowsWatchdog.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Watchdog/WindowsWatchdog.cs b/src/Tgstation.Server.Host/Components/Watchdog/WindowsWatchdog.cs index 563e82096d..8296c3274b 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/WindowsWatchdog.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/WindowsWatchdog.cs @@ -154,23 +154,36 @@ namespace Tgstation.Server.Host.Components.Watchdog } WindowsSwappableDmbProvider windowsProvider = null; + bool suspended = false; try { windowsProvider = new WindowsSwappableDmbProvider(compileJobProvider, ioManager, symlinkFactory); Logger.LogDebug("Swapping to compile job {0}...", windowsProvider.CompileJob.Id); - Server.Suspend(); + try + { + Server.Suspend(); + suspended = true; + } + catch (Exception ex) + { + Logger.LogWarning("Exception while suspending server: {0}", ex); + } + await windowsProvider.MakeActive(cancellationToken).ConfigureAwait(false); - Server.Resume(); } catch(Exception ex) { - Logger.LogDebug("Exception while swapping: {0}", ex); + Logger.LogError("Exception while swapping: {0}", ex); IDmbProvider providerToDispose = windowsProvider ?? compileJobProvider; providerToDispose.Dispose(); throw; } + // Let this throw hard if it fails + if (suspended) + Server.Resume(); + pendingSwappable?.Dispose(); pendingSwappable = windowsProvider; }