From 8625d726b4e895e410967529e50fa16110fea46b Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sun, 19 Aug 2018 14:32:33 -0400 Subject: [PATCH] Fix task continuation from interop handler running before the response is set --- .../Components/Watchdog/SessionController.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Watchdog/SessionController.cs b/src/Tgstation.Server.Host/Components/Watchdog/SessionController.cs index 66b039fba4..e38b92b9bb 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/SessionController.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/SessionController.cs @@ -269,6 +269,7 @@ namespace Tgstation.Server.Host.Components.Watchdog var query = command.Parameters; object content; + Action postRespond = null; if (query.TryGetValue(Constants.DMParameterCommand, out var method)) { content = new object(); @@ -304,7 +305,8 @@ namespace Tgstation.Server.Host.Components.Watchdog //we'll also get here from SetPort so complete that task var tmpTcs = portAssignmentTcs; portAssignmentTcs = null; - tmpTcs?.SetResult(true); + if (tmpTcs != null) + postRespond = () => tmpTcs.SetResult(true); } portClosedForReboot = false; @@ -321,7 +323,7 @@ namespace Tgstation.Server.Host.Components.Watchdog } var oldTcs = rebootTcs; rebootTcs = new TaskCompletionSource(); - oldTcs.SetResult(null); + postRespond = () => oldTcs.SetResult(null); break; default: content = new ErrorMessage { Message = "Requested command not supported!" }; @@ -336,6 +338,8 @@ namespace Tgstation.Server.Host.Components.Watchdog if (response != Constants.DMResponseSuccess) logger.LogWarning("Recieved error response while responding to interop: {0}", response); + + postRespond?.Invoke(); } ///