From f48f23c2ebb79c1096d4cdbeb725f0db006c3cc8 Mon Sep 17 00:00:00 2001 From: John Gross Date: Mon, 21 Aug 2017 18:57:35 -0700 Subject: [PATCH 1/3] Check if thread is running before suspending --- Torch.Server/TorchServer.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Torch.Server/TorchServer.cs b/Torch.Server/TorchServer.cs index ca1ee43..f217a39 100644 --- a/Torch.Server/TorchServer.cs +++ b/Torch.Server/TorchServer.cs @@ -30,6 +30,8 @@ using VRage.Library; using VRage.ObjectBuilders; using VRage.Plugins; using VRage.Utils; +using ThreadState = System.Threading.ThreadState; + #pragma warning disable 618 namespace Torch.Server @@ -182,7 +184,8 @@ namespace Torch.Server if (!mre.WaitOne(TimeSpan.FromSeconds(Instance.Config.TickTimeout))) { var mainThread = MySandboxGame.Static.UpdateThread; - mainThread.Suspend(); + if (mainThread.ThreadState == ThreadState.Running) + mainThread.Suspend(); var stackTrace = new StackTrace(mainThread, true); throw new TimeoutException($"Server watchdog detected that the server was frozen for at least {((TorchServer)state).Config.TickTimeout} seconds.\n{stackTrace}"); } From e9476a59e89be43916e977530398628b1d194771 Mon Sep 17 00:00:00 2001 From: John Gross Date: Mon, 21 Aug 2017 20:15:16 -0700 Subject: [PATCH 2/3] Fix ambiguous reference resolution --- Torch.Server/TorchServer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Torch.Server/TorchServer.cs b/Torch.Server/TorchServer.cs index f217a39..d85ec48 100644 --- a/Torch.Server/TorchServer.cs +++ b/Torch.Server/TorchServer.cs @@ -30,7 +30,6 @@ using VRage.Library; using VRage.ObjectBuilders; using VRage.Plugins; using VRage.Utils; -using ThreadState = System.Threading.ThreadState; #pragma warning disable 618 @@ -184,7 +183,7 @@ namespace Torch.Server if (!mre.WaitOne(TimeSpan.FromSeconds(Instance.Config.TickTimeout))) { var mainThread = MySandboxGame.Static.UpdateThread; - if (mainThread.ThreadState == ThreadState.Running) + if (mainThread.ThreadState == System.Threading.ThreadState.Running) mainThread.Suspend(); var stackTrace = new StackTrace(mainThread, true); throw new TimeoutException($"Server watchdog detected that the server was frozen for at least {((TorchServer)state).Config.TickTimeout} seconds.\n{stackTrace}"); From b5f73a99ccc016340cabd6a18ae08a34e2a0a0b0 Mon Sep 17 00:00:00 2001 From: John Gross Date: Mon, 21 Aug 2017 20:39:54 -0700 Subject: [PATCH 3/3] Use Thread.IsAlive property --- Torch.Server/TorchServer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Torch.Server/TorchServer.cs b/Torch.Server/TorchServer.cs index d85ec48..f5a9b56 100644 --- a/Torch.Server/TorchServer.cs +++ b/Torch.Server/TorchServer.cs @@ -183,7 +183,7 @@ namespace Torch.Server if (!mre.WaitOne(TimeSpan.FromSeconds(Instance.Config.TickTimeout))) { var mainThread = MySandboxGame.Static.UpdateThread; - if (mainThread.ThreadState == System.Threading.ThreadState.Running) + if (mainThread.IsAlive) mainThread.Suspend(); var stackTrace = new StackTrace(mainThread, true); throw new TimeoutException($"Server watchdog detected that the server was frozen for at least {((TorchServer)state).Config.TickTimeout} seconds.\n{stackTrace}");