diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm
index b120d83abcb..3c96126c0f1 100644
--- a/code/controllers/garbage.dm
+++ b/code/controllers/garbage.dm
@@ -6,7 +6,7 @@
var/list/gc_hard_del_types = new
var/datum/garbage_collector/garbageCollector
-/client/verb/gc_dump_hdl()
+/client/proc/gc_dump_hdl()
set name = "(GC) Hard Del List"
set desc = "List types that are hard del()'d by the GC."
set category = "Debug"
@@ -60,6 +60,8 @@ var/datum/garbage_collector/garbageCollector
#endif
AM.hard_deleted = 1
+ if(!AM.type in gc_hard_del_types)
+ gc_hard_del_types += AM.type
del AM
hard_dels++
@@ -93,6 +95,8 @@ var/datum/garbage_collector/garbageCollector
if(!istype(AM))
WARNING("qdel() passed object of type [AM.type]. qdel() can only handle /atom/movable types.")
+ if(!AM.type in gc_hard_del_types)
+ gc_hard_del_types += AM.type
del(AM)
garbageCollector.hard_dels++
garbageCollector.dels_count++
diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm
index fd1a2305cb1..a7decbc1185 100644
--- a/code/controllers/lighting_controller.dm
+++ b/code/controllers/lighting_controller.dm
@@ -19,7 +19,7 @@ datum/controller/lighting/New()
if(lighting_controller != src)
if(istype(lighting_controller,/datum/controller/lighting))
Recover() //if we are replacing an existing lighting_controller (due to a crash) we attempt to preserve as much as we can
- del(lighting_controller)
+ qdel(lighting_controller)
lighting_controller = src
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 98c44b42b6e..963e01b7260 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -42,7 +42,7 @@ datum/controller/game_controller/New()
if(master_controller != src)
if(istype(master_controller))
Recover()
- del(master_controller)
+ qdel(master_controller)
master_controller = src
if(!job_master)
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index 9c19007f590..30ee4a99e43 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -17,7 +17,7 @@ datum/controller/vote
New()
if(vote != src)
if(istype(vote))
- del(vote)
+ qdel(vote)
vote = src
proc/process() //called by master_controller
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index a7db9300c73..f3062199ec7 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -627,7 +627,7 @@ client
for(var/obj/Obj in world)
if(Obj.type == O_type)
i++
- del(Obj)
+ qdel(Obj)
if(!i)
usr << "No objects of this type exist"
return
@@ -638,7 +638,7 @@ client
for(var/obj/Obj in world)
if(istype(Obj,O_type))
i++
- del(Obj)
+ qdel(Obj)
if(!i)
usr << "No objects of this type exist"
return
diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm
index ffede1e6957..0eb4d73dfde 100644
--- a/code/datums/helper_datums/construction_datum.dm
+++ b/code/datums/helper_datums/construction_datum.dm
@@ -231,7 +231,7 @@
user.visible_message(fixText(state["vis_msg"],user),fixText(state["self_msg"],user))
if("delete" in state)
- del(used_atom)
+ qdel(used_atom)
else if("spawn" in state)
var/spawntype=state["spawn"]
var/atom/A = new spawntype(holder.loc)
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 23d9ff5aa18..70024bf68d6 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -49,7 +49,7 @@
//must succeed in most cases
proc/setTeleatom(atom/movable/ateleatom)
if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon))
- del(ateleatom)
+ qdel(ateleatom)
return 0
if(istype(ateleatom))
teleatom = ateleatom
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 4c63722a2ff..905d47d36b8 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -735,7 +735,7 @@ datum/mind
var/obj/item/device/flash/flash = locate() in L
if (!flash)
usr << "\red Deleting flash failed!"
- del(flash)
+ qdel(flash)
if("repairflash")
var/list/L = current.get_contents()
@@ -748,7 +748,7 @@ datum/mind
if("reequip")
var/list/L = current.get_contents()
var/obj/item/device/flash/flash = locate() in L
- del(flash)
+ qdel(flash)
take_uplink()
var/fail = 0
fail |= !ticker.mode.equip_traitor(current, 1)
@@ -927,17 +927,17 @@ datum/mind
if("lair")
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
if("dressup")
- del(H.belt)
- del(H.back)
- del(H.l_ear)
- del(H.r_ear)
- del(H.gloves)
- del(H.head)
- del(H.shoes)
- del(H.wear_id)
- del(H.wear_pda)
- del(H.wear_suit)
- del(H.w_uniform)
+ qdel(H.belt)
+ qdel(H.back)
+ qdel(H.l_ear)
+ qdel(H.r_ear)
+ qdel(H.gloves)
+ qdel(H.head)
+ qdel(H.shoes)
+ qdel(H.wear_id)
+ qdel(H.wear_pda)
+ qdel(H.wear_suit)
+ qdel(H.w_uniform)
if (!ticker.mode.equip_syndicate(current))
usr << "\red Equipping a syndicate failed!"
@@ -1150,7 +1150,7 @@ datum/mind
proc/take_uplink()
var/obj/item/device/uplink/hidden/H = find_syndicate_uplink()
if(H)
- del(H)
+ qdel(H)
proc/make_AI_Malf()
@@ -1191,17 +1191,17 @@ datum/mind
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
var/mob/living/carbon/human/H = current
- del(H.belt)
- del(H.back)
- del(H.l_ear)
- del(H.r_ear)
- del(H.gloves)
- del(H.head)
- del(H.shoes)
- del(H.wear_id)
- del(H.wear_pda)
- del(H.wear_suit)
- del(H.w_uniform)
+ qdel(H.belt)
+ qdel(H.back)
+ qdel(H.l_ear)
+ qdel(H.r_ear)
+ qdel(H.gloves)
+ qdel(H.head)
+ qdel(H.shoes)
+ qdel(H.wear_id)
+ qdel(H.wear_pda)
+ qdel(H.wear_suit)
+ qdel(H.w_uniform)
ticker.mode.equip_syndicate(current)
@@ -1290,7 +1290,7 @@ datum/mind
var/list/L = current.get_contents()
var/obj/item/device/flash/flash = locate() in L
- del(flash)
+ qdel(flash)
take_uplink()
var/fail = 0
// fail |= !ticker.mode.equip_traitor(current, 1)
diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm
index d2c747dd5b8..4f2750c0c06 100644
--- a/code/datums/recipe.dm
+++ b/code/datums/recipe.dm
@@ -79,7 +79,7 @@
var/obj/result_obj = new result(container)
for (var/obj/O in (container.contents-result_obj))
O.reagents.trans_to(result_obj, O.reagents.total_volume)
- del(O)
+ qdel(O)
container.reagents.clear_reagents()
return result_obj
@@ -91,7 +91,7 @@
O.reagents.del_reagent("nutriment")
O.reagents.update_total()
O.reagents.trans_to(result_obj, O.reagents.total_volume)
- del(O)
+ qdel(O)
container.reagents.clear_reagents()
return result_obj
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index a95fe3a4ac2..04baae91356 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -234,7 +234,7 @@
if(H)
user << "You use [src] to destroy [H]."
signs -= H
- del(H)
+ qdel(H)
else
if(signs.len < max_signs)
H = new(get_turf(target))
@@ -250,7 +250,7 @@
if(signs.len)
var/list/L = signs.Copy()
for(var/sign in L)
- del(sign)
+ qdel(sign)
signs -= sign
user << "You clear all active holograms."
@@ -313,7 +313,7 @@
if(ishuman(C))
dead_legs(C)
if(src)
- del(src)
+ qdel(src)
proc/dead_legs(mob/living/carbon/human/H as mob)
var/datum/organ/external/l = H.get_organ("l_leg")
@@ -562,8 +562,8 @@
if(istype(A, /obj/effect/plantsegment))
for(var/obj/effect/plantsegment/B in orange(A,1))
if(prob(80))
- del B
- del A
+ qdel(B)
+ qdel(A)
/*
/obj/item/weapon/cigarpacket
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 5e451c19a92..29b1cd1b3d9 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -65,7 +65,7 @@
component_parts += new /obj/item/stack/cable_coil(src, 1)
component_parts += new /obj/item/stack/cable_coil(src, 1)
RefreshParts()
-
+
/obj/machinery/dna_scannernew/upgraded/New()
..()
component_parts = list()
@@ -233,7 +233,7 @@
return
put_in(G.affecting)
src.add_fingerprint(user)
- del(G)
+ qdel(G)
return
/obj/machinery/dna_scannernew/proc/put_in(var/mob/M)
@@ -309,7 +309,7 @@
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
- del(src)
+ qdel(src)
/obj/machinery/computer/scan_consolenew
name = "DNA Modifier Access Console"
@@ -367,7 +367,7 @@
/obj/machinery/computer/scan_consolenew/blob_act()
if(prob(75))
- del(src)
+ qdel(src)
/obj/machinery/computer/scan_consolenew/power_change()
if(stat & BROKEN)
diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm
index c154d8f9249..239b71a3992 100644
--- a/code/game/dna/genes/goon_powers.dm
+++ b/code/game/dna/genes/goon_powers.dm
@@ -316,7 +316,7 @@
else
usr.visible_message("\red [usr] eats \the [the_item].")
playsound(usr.loc, 'sound/items/eatfood.ogg', 50, 0)
- del(the_item)
+ qdel(the_item)
doHeal(usr)
return
diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm
index c810b0dd88c..03ca9880c2c 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -33,7 +33,7 @@
animation.master = src
flick("h2monkey", animation)
sleep(48)
- del(animation)
+ qdel(animation)
var/mob/living/carbon/monkey/O = null
@@ -56,7 +56,7 @@
for(var/obj/T in (M.contents-implants))
- del(T)
+ qdel(T)
O.loc = M.loc
@@ -78,7 +78,7 @@
I.loc = O
I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call
- del(M)
+ qdel(M)
return
/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 94ad7725c1b..e251f9a5777 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -223,8 +223,8 @@ var/list/mechtoys = list(
plat_count += P.amount
// If you send something in a crate, centcom's keeping it! - fixes secure crates being sent to centom to open them
- del(A)
- del(MA)
+ qdel(A)
+ qdel(MA)
if(plasma_count)
points += plasma_count * points_per_plasma
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 53f887b425e..6a7ee186c40 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -144,7 +144,8 @@ var/list/admin_verbs_debug = list(
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/toggledebuglogs,
- /client/proc/qdel_toggle // /vg/
+ /client/proc/qdel_toggle, // /vg/
+ /client/proc/gc_dump_hdl
)
var/list/admin_verbs_possess = list(
/proc/possess,