Fixes timers cleaning up oddly in certain edge cases.

This commit is contained in:
MrStonedOne
2017-01-17 00:12:29 -08:00
parent c8d4ed5cfd
commit 01e8fc6fbc
2 changed files with 10 additions and 10 deletions
+4 -1
View File
@@ -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
+6 -9
View File
@@ -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