diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm index 657f809b9e..8ffbfa1cae 100644 --- a/code/controllers/Processes/garbage.dm +++ b/code/controllers/Processes/garbage.dm @@ -3,8 +3,8 @@ var/datum/controller/process/garbage_collector/garbage_collector // #define GC_DEBUG 1 /datum/controller/process/garbage_collector var/collection_timeout = 300 //deciseconds to wait to let running procs finish before we just say fuck it and force del() the object - var/max_checks_multiplier = 5 //multiplier (per-decisecond) for calculating max number of tests per SS tick. These tests check if our GC'd objects are actually GC'd - var/max_forcedel_multiplier = 1 //multiplier (per-decisecond) for calculating max number of force del() calls per SS tick. + var/max_checks_multiplier = 5 //multiplier (per-decisecond) for calculating max number of tests per tick. These tests check if our GC'd objects are actually GC'd + var/max_forcedel_multiplier = 1 //multiplier (per-decisecond) for calculating max number of force del() calls per tick. var/dels = 0 // number of del()'s we've done this tick var/list/destroyed = list() // list of refID's of things that should be garbage collected @@ -16,7 +16,7 @@ var/datum/controller/process/garbage_collector/garbage_collector /datum/controller/process/garbage_collector/setup() name = "garbage" - schedule_interval = 60 // every 6 seconds + schedule_interval = 20 // every 2 seconds if(!garbage_collector) garbage_collector = src @@ -94,6 +94,7 @@ var/datum/controller/process/garbage_collector/garbage_collector // This should be overridden to remove all references pointing to the object being destroyed. // Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.) /datum/proc/Destroy() + tag = null return /datum/var/gc_destroyed //Time when this object was destroyed. diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 79d6e8fd08..6858398dff 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -14,6 +14,25 @@ var/moved_recently = 0 var/mob/pulledby = null +/atom/movable/Del() + if(isnull(gc_destroyed) && loc) + testing("GC: -- [type] was deleted via del() rather than qdel() --") + Destroy() + else if(isnull(gc_destroyed)) + testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel() +// else +// testing("GC: [type] was deleted via GC with qdel()") + ..() + +/atom/movable/Destroy() + . = ..() + if(reagents) + qdel(reagents) + for(var/atom/movable/AM in contents) + qdel(AM) + loc = null + invisibility = 101 + /atom/movable/Bump(var/atom/A, yes) if(src.throwing) src.throw_impact(A) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 87ab21e610..576e7f2617 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -60,6 +60,12 @@ */ var/list/sprite_sheets_obj = null +/obj/item/Destroy() + if(ismob(loc)) + var/mob/m = loc + m.unEquip(src, 1) + return ..() + /obj/item/device icon = 'icons/obj/device.dmi'