From 19cf03546c84137b262e4d543814b5f041ffd3b5 Mon Sep 17 00:00:00 2001 From: cib Date: Fri, 22 Jun 2012 04:18:00 -0700 Subject: [PATCH] Master controller debugging for crashes. Warning: This can cause up to 100 writes to a file per second, which may cause notable CPU consumption. Should remove this, or replace it with a C DLL at some point. --- code/defines/global.dm | 1 + code/game/algorithm.dm | 5 ++ code/game/master_controller.dm | 100 ++++++++++++++++++--------------- 3 files changed, 61 insertions(+), 45 deletions(-) diff --git a/code/defines/global.dm b/code/defines/global.dm index f5d4266cddb..ec8f7573a1c 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -64,6 +64,7 @@ var/blobevent = 0 /////////////// var/diary = null +var/crashlog = null // Text file to store info in that might help with debugging crashes var/diaryofmeanpeople = null var/href_logfile = null var/station_name = null diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm index 3789a2227fc..40ad8e5d15c 100644 --- a/code/game/algorithm.dm +++ b/code/game/algorithm.dm @@ -3,6 +3,11 @@ /world/New() ..() + // Setup crashlog for debugging purposes + crashlog = file("crashlog.txt") + crashlog << "==========================================================\n" + crashlog << "** A new round has started.\n" + diary = file("data/logs/[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log") diary << {" diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index f45ac267924..0880bfa9ce3 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -25,6 +25,7 @@ datum/controller/game_controller setup() setup_objects() process() + set_debug_state(txt) setup() if(master_controller && (master_controller != src)) @@ -104,6 +105,12 @@ datum/controller/game_controller world << "\red \b Initializations complete." + set_debug_state(txt) + // This should describe what is currently being done by the master controller + // Useful for crashlogs and similar, because that way it's easy to tell what + // was going on when the server crashed. + + crashlog << "TickerState: [txt]" process() @@ -134,76 +141,79 @@ datum/controller/game_controller powernets_ready = 0 ticker_ready = 0 + // Wipe the crashlog every now and then to avoid it becoming too large + if(controller_iteration % 600 == 0) + del(crashlog) + fdel("crashlog.txt") + crashlog = file("crashlog.txt") + // the fact that the air master is not in the master controller + // will make it very hard to find out whether it's responsible + // for crashes + air_master_ready = 1 - - - spawn(0) -// air_master.process() - air_master_ready = 1 - spawn(0) - tension_master.process() - tension_master_ready = 1 + src.set_debug_state("Tension Master") + tension_master.process() + tension_master_ready = 1 sleep(1) - spawn(0) - sun.calc_position() - sun_ready = 1 + src.set_debug_state("Sun Position Calculations") + sun.calc_position() + sun_ready = 1 sleep(-1) - spawn(0) - for(var/mob/M in world) - M.Life() - mobs_ready = 1 - - + src.set_debug_state("Mob Life Processing") + for(var/mob/M in world) + M.Life() + mobs_ready = 1 sleep(-1) - spawn(0) - for(var/datum/disease/D in active_diseases) - D.process() - diseases_ready = 1 + src.set_debug_state("Old Disease Processing") + for(var/datum/disease/D in active_diseases) + D.process() + diseases_ready = 1 - spawn(0) - for(var/obj/machinery/machine in machines) - if(machine) - machine.process() - if(machine && machine.use_power) - machine.auto_use_power() + src.set_debug_state("Machinery Processing") + for(var/obj/machinery/machine in machines) + if(machine) + machine.process() + if(machine && machine.use_power) + machine.auto_use_power() - machines_ready = 1 + machines_ready = 1 sleep(-1) sleep(1) - spawn(0) - for(var/obj/object in processing_objects) - object.process() - objects_ready = 1 + src.set_debug_state("Object Processing") + for(var/obj/object in processing_objects) + object.process() + objects_ready = 1 - spawn(0) - for(var/datum/pipe_network/network in pipe_networks) - network.process() - networks_ready = 1 + src.set_debug_state("Pipe Network Processing") + for(var/datum/pipe_network/network in pipe_networks) + network.process() + networks_ready = 1 - spawn(0) - for(var/datum/powernet/P in powernets) - P.reset() - powernets_ready = 1 + src.set_debug_state("Powernet Processing") + for(var/datum/powernet/P in powernets) + P.reset() + powernets_ready = 1 sleep(-1) - spawn(0) - ticker.process() - ticker_ready = 1 + src.set_debug_state("Mode Processing") + ticker.process() + ticker_ready = 1 + src.set_debug_state("Idle") sleep(world.timeofday+10-start_time)// Don't touch this. DMTG - while(!air_master_ready || !tension_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready) - sleep(1) + //while(!air_master_ready || !tension_master_ready || !sun_ready || !mobs_ready || !diseases_ready || !machines_ready || !objects_ready || !networks_ready || !powernets_ready || !ticker_ready) + // sleep(1) spawn process()