Check if thread is running before suspending

This commit is contained in:
John Gross
2017-08-21 18:57:35 -07:00
parent ddf465d8c9
commit f48f23c2eb

View File

@@ -30,6 +30,8 @@ using VRage.Library;
using VRage.ObjectBuilders; using VRage.ObjectBuilders;
using VRage.Plugins; using VRage.Plugins;
using VRage.Utils; using VRage.Utils;
using ThreadState = System.Threading.ThreadState;
#pragma warning disable 618 #pragma warning disable 618
namespace Torch.Server namespace Torch.Server
@@ -182,6 +184,7 @@ namespace Torch.Server
if (!mre.WaitOne(TimeSpan.FromSeconds(Instance.Config.TickTimeout))) if (!mre.WaitOne(TimeSpan.FromSeconds(Instance.Config.TickTimeout)))
{ {
var mainThread = MySandboxGame.Static.UpdateThread; var mainThread = MySandboxGame.Static.UpdateThread;
if (mainThread.ThreadState == ThreadState.Running)
mainThread.Suspend(); mainThread.Suspend();
var stackTrace = new StackTrace(mainThread, true); 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}"); throw new TimeoutException($"Server watchdog detected that the server was frozen for at least {((TorchServer)state).Config.TickTimeout} seconds.\n{stackTrace}");