diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index f792d9af02..6203388ec1 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -57,23 +57,23 @@ var/datum/controller/failsafe/Failsafe if(4,5) --defcon if(3) - to_chat(GLOB.admins, "Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + log_and_message_admins("SSfailsafe Notice: DEFCON [defcon_pretty()]. The Master Controller (\ref[Master]) has not fired in the last [(5-defcon) * processing_interval] ticks.") --defcon if(2) - to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + log_and_message_admins("SSfailsafe Warning: DEFCON [defcon_pretty()]. The Master Controller (\ref[Master]) has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") --defcon if(1) - to_chat(GLOB.admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + log_and_message_admins("SSfailsafe Warning: DEFCON [defcon_pretty()]. The Master Controller (\ref[Master]) has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") --defcon var/rtn = Recreate_MC() if(rtn > 0) defcon = 4 master_iteration = 0 - to_chat(GLOB.admins, "MC restarted successfully") + log_and_message_admins("SSfailsafe Notice: MC (New:\ref[Master]) restarted successfully") else if(rtn < 0) - log_world("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") - to_chat(GLOB.admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") + log_game("SSfailsafe Notice: Could not restart MC (\ref[Master]), runtime encountered. Entering defcon 0") + log_and_message_admins("SSFAILSAFE ERROR: DEFCON [defcon_pretty()]. Could not restart MC (\ref[Master]), runtime encountered. I will silently keep retrying.") //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again //no need to handle that specially when defcon 0 can handle it if(0) //DEFCON 0! (mc failed to restart) @@ -81,7 +81,7 @@ var/datum/controller/failsafe/Failsafe if(rtn > 0) defcon = 4 master_iteration = 0 - to_chat(GLOB.admins, "MC restarted successfully") + log_and_message_admins("SSfailsafe Notice: MC (New:\ref[Master]) restarted successfully") else defcon = min(defcon + 1,5) master_iteration = Master.iteration diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 110b7dc633..4ff1b7219b 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -132,11 +132,11 @@ GLOBAL_REAL(Master, /datum/controller/master) = new LAZYINITLIST(BadBoy.failure_strikes) switch(++BadBoy.failure_strikes[BadBoy.type]) if(2) - msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." + msg = "MC Notice: The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." FireHim = TRUE BadBoy.fail() if(3) - msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + msg = "MC Notice: The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." BadBoy.flags |= SS_NO_FIRE BadBoy.critfail() if(msg) @@ -152,7 +152,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new current_runlevel = Master.current_runlevel StartProcessing(10) else - to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") + to_world("The Master Controller is having some issues, we will need to re-initialize EVERYTHING") Initialize(20, TRUE) @@ -170,7 +170,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new if(init_sss) init_subtypes(/datum/controller/subsystem, subsystems) - to_chat(world, "Initializing subsystems...") + to_chat(world, "MC: Initializing subsystems...") // Sort subsystems by init_order, so they initialize in the correct order. sortTim(subsystems, /proc/cmp_subsystem_init) @@ -186,7 +186,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new current_ticklimit = TICK_LIMIT_RUNNING var/time = (REALTIMEOFDAY - start_timeofday) / 10 - var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" + var/msg = "MC: Initializations complete within [time] second[time == 1 ? "" : "s"]!" to_chat(world, "[msg]") log_world(msg) @@ -229,15 +229,17 @@ GLOBAL_REAL(Master, /datum/controller/master) = new if (rtn > 0 || processing < 0) return //this was suppose to happen. //loop ended, restart the mc - log_game("MC crashed or runtimed, restarting") - message_admins("MC crashed or runtimed, restarting") - log_world("MC crashed or runtimed, restarting") + log_and_message_admins("MC Notice: MC crashed or runtimed, self-restarting (\ref[src])") var/rtn2 = Recreate_MC() - if (rtn2 <= 0) - log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") - message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") - log_world("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") - Failsafe.defcon = 2 + switch(rtn2) + if(-1) + log_and_message_admins("MC Warning: Failed to self-recreate MC (Return code: [rtn2]), it's up to the failsafe now (\ref[src])") + Failsafe.defcon = 2 + if(0) + log_and_message_admins("MC Warning: Too soon for MC self-restart (Return code: [rtn2]), going to let failsafe handle it (\ref[src])") + Failsafe.defcon = 2 + if(1) + log_and_message_admins("MC Notice: MC self-recreated, old MC departing (Return code: [rtn2]) (\ref[src])") // Main loop. /datum/controller/master/proc/Loop() diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm index 8ef34e164f..548e0bdb5c 100644 --- a/code/controllers/subsystems/air.dm +++ b/code/controllers/subsystems/air.dm @@ -68,10 +68,14 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun /datum/controller/subsystem/air/fire(resumed = 0) var/timer if(!resumed) - ASSERT(LAZYLEN(currentrun) == 0) // Santity checks to make sure we don't somehow have items left over from last cycle - ASSERT(current_step == null) // Or somehow didn't finish all the steps from last cycle - current_cycle++ // Begin a new air_master cycle! - current_step = SSAIR_TURFS // Start with Step 1 of course + // Santity checks to make sure we don't somehow have items left over from last cycle + // Or somehow didn't finish all the steps from last cycle + if(LAZYLEN(currentrun) || current_step) + log_and_message_admins("SSair: Was told to start a new run, but the previous run wasn't finished! currentrun.len=[currentrun.len], current_step=[current_step]") + resumed = TRUE + else + current_cycle++ // Begin a new air_master cycle! + current_step = SSAIR_TURFS // Start with Step 1 of course INTERNAL_PROCESS_STEP(SSAIR_TURFS, TRUE, process_tiles_to_update, cost_turfs, SSAIR_EDGES) INTERNAL_PROCESS_STEP(SSAIR_EDGES, FALSE, process_active_edges, cost_edges, SSAIR_FIREZONES) @@ -80,10 +84,11 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun INTERNAL_PROCESS_STEP(SSAIR_ZONES, FALSE, process_zones_to_update, cost_zones, SSAIR_DONE) // Okay, we're done! Woo! Got thru a whole air_master cycle! - ASSERT(LAZYLEN(currentrun) == 0) // Sanity checks to make sure there are really none left - ASSERT(current_step == SSAIR_DONE) // And that we didn't somehow skip past the last step - currentrun = null - current_step = null + if(LAZYLEN(currentrun) || current_step != SSAIR_DONE) + log_and_message_admins("SSair: Was not able to complete a full air cycle despite reaching the end of fire(). This shouldn't happen.") + else + currentrun = null + current_step = null /datum/controller/subsystem/air/proc/process_tiles_to_update(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm index 8817d83ad5..5c7b15d898 100644 --- a/code/controllers/subsystems/lighting.dm +++ b/code/controllers/subsystems/lighting.dm @@ -45,9 +45,13 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/lighting/fire(resumed = FALSE) var/timer if(!resumed) - ASSERT(LAZYLEN(currentrun) == 0) // Santity checks to make sure we don't somehow have items left over from last cycle - ASSERT(stage == null) // Or somehow didn't finish all the steps from last cycle - stage = SSLIGHTING_STAGE_LIGHTS // Start with Step 1 of course + // Santity checks to make sure we don't somehow have items left over from last cycle + // Or somehow didn't finish all the steps from last cycle + if(LAZYLEN(currentrun) || stage) + log_and_message_admins("SSlighting: Was told to start a new run, but the previous run wasn't finished! currentrun.len=[currentrun.len], stage=[stage]") + resumed = TRUE + else + stage = SSLIGHTING_STAGE_LIGHTS // Start with Step 1 of course if(stage == SSLIGHTING_STAGE_LIGHTS) timer = TICK_USAGE @@ -77,10 +81,11 @@ SUBSYSTEM_DEF(lighting) stage = SSLIGHTING_STAGE_DONE // Okay, we're done! Woo! Got thru a whole air_master cycle! - ASSERT(LAZYLEN(currentrun) == 0) // Sanity checks to make sure there are really none left - ASSERT(stage == SSLIGHTING_STAGE_DONE) // And that we didn't somehow skip past the last step - currentrun = null - stage = null + if(LAZYLEN(currentrun) || stage != SSLIGHTING_STAGE_DONE) + log_and_message_admins("SSlighting: Was not able to complete a full lighting cycle despite reaching the end of fire(). This shouldn't happen.") + else + currentrun = null + stage = null /datum/controller/subsystem/lighting/proc/internal_process_lights(resumed = FALSE, init_tick_checks = FALSE) if (!resumed)