diff --git a/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs b/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs
index d6377963eb..2bbff38173 100644
--- a/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs
+++ b/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs
@@ -770,6 +770,28 @@ namespace Tgstation.Server.Host.Components.Watchdog
}
}
+ ///
+ /// Check for a new .
+ ///
+ /// The session's current .
+ /// A that completes if and when a newer is available.
+ Task InitialCheckDmbUpdated(CompileJob currentCompileJob)
+ {
+ var factoryTask = DmbFactory.OnNewerDmb;
+
+ var latestCompileJob = DmbFactory.LatestCompileJob();
+ if (latestCompileJob == null)
+ return factoryTask;
+
+ if (latestCompileJob.Id != currentCompileJob.Id)
+ {
+ Logger.LogDebug("Found new CompileJob without waiting");
+ return Task.CompletedTask;
+ }
+
+ return factoryTask;
+ }
+
///
/// The main loop of the watchdog. Ayschronously waits for events to occur and then responds to them.
///
@@ -792,6 +814,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
activeLaunchParametersChanged = null,
newDmbAvailable = null;
ISessionController lastController = null;
+ var ranInitialDmbCheck = false;
for (ulong iteration = 1; nextAction != MonitorAction.Exit; ++iteration)
using (LogContext.PushProperty("Monitor", iteration))
try
@@ -803,19 +826,19 @@ namespace Tgstation.Server.Host.Components.Watchdog
void UpdateMonitoredTasks()
{
- static void TryUpdateTask(ref Task oldTask, Task newTask)
+ static void TryUpdateTask(ref Task oldTask, Func newTaskFactory)
{
if (oldTask?.IsCompleted == true)
return;
- oldTask = newTask;
+ oldTask = newTaskFactory();
}
if (lastController == controller)
{
- TryUpdateTask(ref activeServerLifetime, controller.Lifetime);
- TryUpdateTask(ref activeServerReboot, controller.OnReboot);
- TryUpdateTask(ref serverPrimed, controller.OnPrime);
+ TryUpdateTask(ref activeServerLifetime, () => controller.Lifetime);
+ TryUpdateTask(ref activeServerReboot, () => controller.OnReboot);
+ TryUpdateTask(ref serverPrimed, () => controller.OnPrime);
}
else
{
@@ -825,8 +848,17 @@ namespace Tgstation.Server.Host.Components.Watchdog
lastController = controller;
}
- TryUpdateTask(ref activeLaunchParametersChanged, ActiveParametersUpdated.Task);
- TryUpdateTask(ref newDmbAvailable, DmbFactory.OnNewerDmb);
+ TryUpdateTask(ref activeLaunchParametersChanged, () => ActiveParametersUpdated.Task);
+ TryUpdateTask(
+ ref newDmbAvailable,
+ () =>
+ {
+ var result = ranInitialDmbCheck
+ ? DmbFactory.OnNewerDmb
+ : InitialCheckDmbUpdated(controller.CompileJob);
+ ranInitialDmbCheck = true;
+ return result;
+ });
}
UpdateMonitoredTasks();