From 01e8fc6fbc0d251d8e32420fa744fc7da114a7e3 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Tue, 17 Jan 2017 00:12:29 -0800 Subject: [PATCH] Fixes timers cleaning up oddly in certain edge cases. --- code/controllers/subsystem/garbage.dm | 5 ++++- code/controllers/subsystem/timer.dm | 15 ++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 50a6892bd79..ece8d7c5678 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -228,7 +228,10 @@ var/datum/subsystem/garbage_collector/SSgarbage tag = null var/list/timers = active_timers active_timers = null - for(var/timer in timers) + for(var/thing in timers) + var/datum/timedevent/timer = thing + if (timer.spent) + continue qdel(timer) return QDEL_HINT_QUEUE diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 6a80c6bfc78..d8b283b0009 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -88,10 +88,9 @@ var/datum/subsystem/timer/SStimer break if (head.prev) head.prev.next = timer - if (timer) - if (timer.prev) - timer.prev.next = head - timer.prev = head.prev + if (timer.prev) + timer.prev.next = head + timer.prev = head.prev bucket_list[practical_offset] = timer break LOOP_OUTER while (timer && timer != head) @@ -244,7 +243,7 @@ var/datum/subsystem/timer/SStimer SStimer.hashes -= hash - if (callBack && callBack.object != GLOBAL_PROC && callBack.object.active_timers) + if (callBack && callBack.object && callBack.object != GLOBAL_PROC && callBack.object.active_timers) callBack.object.active_timers -= src UNSETEMPTY(callBack.object.active_timers) @@ -272,9 +271,10 @@ var/datum/subsystem/timer/SStimer if (bucketpos > 0 && bucketpos <= length(bucket_list)) buckethead = bucket_list[bucketpos] + SStimer.bucket_count-- else SStimer.processing -= src - SStimer.bucket_count-- + if (buckethead == src) bucket_list[bucketpos] = next else @@ -283,9 +283,6 @@ var/datum/subsystem/timer/SStimer if (next && next.prev == src) next.prev = null - prev = null - next = null - return QDEL_HINT_IWILLGC