diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index df7252994b2..c8475d8cee4 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -284,15 +284,21 @@ SUBSYSTEM_DEF(garbage) /// /// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. /proc/qdel(datum/D, force=FALSE, ...) + if(isweakref(D)) + var/datum/weakref/weakref = D + D = weakref.resolve() + if(!D) + return + if(!istype(D)) del(D) return + var/datum/qdel_item/I = SSgarbage.items[D.type] if (!I) I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) I.qdels++ - if(isnull(D.gc_destroyed)) if (SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c0e2b292e45..9080f136e76 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -180,7 +180,7 @@ QDEL_IN(colour, 11) doomslayer = victim RegisterSignal(src, COMSIG_PARENT_QDELETING, .proc/end_blood_frenzy) - QDEL_IN(src, duration) + QDEL_IN(WEAKREF(src), duration) /obj/effect/mine/pickup/bloodbath/proc/end_blood_frenzy() if(doomslayer) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index d2740389fd7..12637a3e485 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -87,7 +87,7 @@ add_overlay("hatch") add_overlay("legs_retracted") addtimer(CALLBACK(src, .proc/startUp), 50) - QDEL_IN(src, 8 MINUTES) //Self-destruct after 8 min + QDEL_IN(WEAKREF(src), 8 MINUTES) //Self-destruct after 8 min SSeconomy.market_crashing = TRUE