From eb8e54c1f0ef3165c49a7b864e49b9c4c48a8823 Mon Sep 17 00:00:00 2001 From: dongresource Date: Sun, 27 Nov 2022 22:33:55 +0100 Subject: [PATCH] Do not evaluate timers if the server is shutting down This should fix issues with segfaults when the server is being terminated that sometimes occur because things like NPC path traversal keep running while the process is executing the signal handler. --- src/servers/CNShardServer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/servers/CNShardServer.cpp b/src/servers/CNShardServer.cpp index 036df15..0c97c9f 100644 --- a/src/servers/CNShardServer.cpp +++ b/src/servers/CNShardServer.cpp @@ -115,6 +115,10 @@ void CNShardServer::kill() { void CNShardServer::onStep() { time_t currTime = getTime(); + // do not evaluate timers if the server is shutting down + if (!active) + return; + for (TimerEvent& event : Timers) { if (event.scheduledEvent == 0) { // event hasn't been queued yet, go ahead and do that