Make GC'd objects super invisible to help unreference them more.

qdel() and clear contents of things when they themselves are qdel()
Forgot to add the gc_cost to the total cost of the MC.
This commit is contained in:
MrPerson
2014-02-23 18:07:33 -08:00
parent 08a06487c0
commit edc7cfd63a
3 changed files with 5 additions and 1 deletions
+2
View File
@@ -45,6 +45,7 @@ var/list/uncollectable_vars=list(
continue
// testing("GC: Unsetting [vname] in [A.type]")
A.vars[vname] = null
A.invisibility = 101 // Idea by ChuckTheSheep to make the object even more unreferencable
// testing("GC: Pop([A.type]) - destroyed\[\ref[A]\] = [A.gc_destroyed] current time: [world.timeofday]")
destroyed["\ref[A]"] = A.gc_destroyed
queue.Cut(1, 2)
@@ -79,6 +80,7 @@ var/list/uncollectable_vars=list(
// else
// testing("GC: [refID] properly GC'd at [world.timeofday] with timeout [GCd_at_time]")
destroyed.Cut(i, ++i) // also increases i in general
/**
* NEVER USE THIS FOR ANYTHING OTHER THAN /atom/movable
* OTHER TYPES CANNOT BE QDEL'D BECAUSE THEIR LOC IS LOCKED OR THEY DON'T HAVE ONE.
+1 -1
View File
@@ -208,7 +208,7 @@ datum/controller/game_controller/proc/process()
gc_cost = (world.timeofday - timer) / 10
//TIMING
total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost
total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost + gc_cost
var/end_time = world.timeofday
if(end_time < start_time)
+2
View File
@@ -55,6 +55,8 @@
// Also called on del()
/atom/proc/Destroy()
gc_destroyed = world.timeofday
for(var/atom/movable/AM in contents)
qdel(AM)
if(reagents)
reagents.delete()
del(reagents) // Technically I think the reagent holder will gc, but let's be careful here and delete all the reagents and the holder too