mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 23:58:07 +01:00
Fixes timers cleaning up oddly in certain edge cases.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user