From 480ee14f34f3b34c8aae9b8b99367d220daa714d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 15 Mar 2017 15:41:15 -0400 Subject: [PATCH 1/5] Fixes some badness with controller restarting --- code/controllers/admin.dm | 3 +-- code/controllers/failsafe.dm | 10 +++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index cb8f3480e0e..20a99e8f6f7 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -40,8 +40,7 @@ return switch(controller) if("Master") - new/datum/controller/master() - Master.process() + Recreate_MC() feedback_add_details("admin_verb","RMC") if("Failsafe") new /datum/controller/failsafe() diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index e2427d3c295..5580c5234b1 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -20,6 +20,7 @@ var/datum/controller/failsafe/Failsafe // Track the MC iteration to make sure its still on track. var/master_iteration = 0 + var/running = TRUE /datum/controller/failsafe/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. @@ -32,14 +33,17 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/Initialize() set waitfor = 0 Failsafe.Loop() + running = FALSE qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us /datum/controller/failsafe/Destroy() - ..() - return QDEL_HINT_HARDDEL_NOW + if(running) + running = FALSE + return QDEL_HINT_LETMELIVE + return ..() /datum/controller/failsafe/proc/Loop() - while(1) + while(running) lasttick = world.time if(!Master) // Replace the missing Master! This should never, ever happen. From 556d831ed1c988c242211f51699eee58983f5178 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 15 Mar 2017 15:42:57 -0400 Subject: [PATCH 2/5] Whoops --- code/controllers/failsafe.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 5580c5234b1..898928bb498 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -40,7 +40,7 @@ var/datum/controller/failsafe/Failsafe if(running) running = FALSE return QDEL_HINT_LETMELIVE - return ..() + return QDEL_HINT_HARDDEL_NOW /datum/controller/failsafe/proc/Loop() while(running) From 8a82bfe7cd0ad29be04cbdb2daadfc63f9d834d2 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 15 Mar 2017 15:43:22 -0400 Subject: [PATCH 3/5] Flash coding --- code/controllers/failsafe.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 898928bb498..262e6d98dcd 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -40,6 +40,7 @@ var/datum/controller/failsafe/Failsafe if(running) running = FALSE return QDEL_HINT_LETMELIVE + ..() return QDEL_HINT_HARDDEL_NOW /datum/controller/failsafe/proc/Loop() From ed8a1bafb1cb7ffcd6be4a08778bc163e725c2d7 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 15 Mar 2017 21:02:09 -0400 Subject: [PATCH 4/5] Fair enough I suppose --- code/controllers/failsafe.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 262e6d98dcd..4c374c18284 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -33,13 +33,11 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/Initialize() set waitfor = 0 Failsafe.Loop() - running = FALSE - qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us + if(!QDELETED(src)) + qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us /datum/controller/failsafe/Destroy() - if(running) - running = FALSE - return QDEL_HINT_LETMELIVE + running = FALSE ..() return QDEL_HINT_HARDDEL_NOW From 45f6b775075593b0f3bc01fc4a819edf333ca63a Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Wed, 15 Mar 2017 21:02:36 -0400 Subject: [PATCH 5/5] Use src, otherwise bad --- code/controllers/failsafe.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 4c374c18284..2494787c91d 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -34,7 +34,7 @@ var/datum/controller/failsafe/Failsafe set waitfor = 0 Failsafe.Loop() if(!QDELETED(src)) - qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us + qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us /datum/controller/failsafe/Destroy() running = FALSE