Scheduler, observation, and New() tweaks.

Corrects a number of places where New() did not call ..(), and implements similar changes to attempt to ensure New()/initialize() complete running before qdel() runs.
Cuts down on the number of created items during server start.
This commit is contained in:
PsiOmegaDelta
2015-12-27 17:44:53 +01:00
parent 1a8fc50f1e
commit a4545f8ded
28 changed files with 107 additions and 88 deletions
+6 -2
View File
@@ -1,4 +1,4 @@
/var/global/datum/controller/process/scheduler/scheduler
/var/datum/controller/process/scheduler/scheduler
/************
* Scheduler *
@@ -39,9 +39,12 @@
/**********
* Helpers *
**********/
/proc/schedule_task_in(var/in_time, var/procedure, var/list/arguments)
/proc/schedule_task_in(var/in_time, var/procedure, var/list/arguments = list())
schedule_task(world.time + in_time, procedure, arguments)
/proc/schedule_task_with_source_in(var/in_time, var/source, var/procedure, var/list/arguments = list())
schedule_task_with_source(world.time + in_time, source, procedure, arguments)
/proc/schedule_task(var/trigger_time, var/procedure, var/list/arguments)
var/datum/scheduled_task/st = new/datum/scheduled_task(trigger_time, procedure, arguments, /proc/destroy_scheduled_task, list())
scheduler.schedule(st)
@@ -69,6 +72,7 @@
var/list/task_after_process_args
/datum/scheduled_task/New(var/trigger_time, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args)
..()
src.trigger_time = trigger_time
src.procedure = procedure
src.arguments = arguments ? arguments : list()
+2 -1
View File
@@ -47,7 +47,8 @@ datum/controller/game_controller/proc/setup_objects()
admin_notice("<span class='danger'>Initializing objects</span>", R_DEBUG)
sleep(-1)
for(var/atom/movable/object in world)
object.initialize()
if(isnull(object.gcDestroyed))
object.initialize()
admin_notice("<span class='danger'>Initializing areas</span>", R_DEBUG)
sleep(-1)
-2
View File
@@ -28,7 +28,6 @@ var/global/datum/getrev/revdata = new()
world.log << branch
world.log << date
world.log << revision
return
client/verb/showrevinfo()
set category = "OOC"
@@ -43,4 +42,3 @@ client/verb/showrevinfo()
src << revdata.revision
else
src << "Revision unknown"
return
+1 -1
View File
@@ -63,7 +63,7 @@
/datum/mind/New(var/key)
src.key = key
..()
/datum/mind/proc/transfer_to(mob/living/new_character)
if(!istype(new_character))
+9 -2
View File
@@ -9,13 +9,15 @@
return ..()
/datum/observ/proc/register(var/datum/procOwner, var/proc_call)
if(!(procOwner && procOwner.destruction))
return
if(!listeners)
listeners = list()
listeners[procOwner] = proc_call
procOwner.destruction.register(src, /datum/observ/proc/unregister)
/datum/observ/proc/unregister(var/datum/procOwner)
if(!listeners)
if(!(listeners && procOwner && procOwner.destruction))
return
listeners -= procOwner
procOwner.destruction.unregister(src)
@@ -37,7 +39,6 @@
..()
/datum/Destroy()
destruction.raise_event(list(src))
destroy_observers()
return ..()
@@ -45,12 +46,18 @@
destruction = new()
/datum/proc/destroy_observers()
if(!destruction)
return FALSE
destruction.raise_event(list(src))
qdel(destruction)
destruction = null
return TRUE
// This ensures that observer handlers don't create their own observer handlers, which create their own handlers, which create...
/datum/observ/init_observers()
return
// And this ensures that observer handlers don't attempt to notify others about their own death while being unable to.
/datum/observ/destroy_observers()
return
+6 -3
View File
@@ -44,6 +44,7 @@
/obj/item/weapon/soap/deluxe/New()
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
..()
/obj/item/weapon/soap/syndie
desc = "An untrustworthy bar of soap. Smells of fear."
@@ -395,9 +396,11 @@
icon = 'icons/obj/stock_parts.dmi'
w_class = 2.0
var/rating = 1
New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
/obj/item/weapon/stock_parts/New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
..()
//Rank 1
+3 -2
View File
@@ -45,7 +45,8 @@
pulledby = null
/atom/movable/proc/initialize()
return
if(!isnull(gcDestroyed))
crash_with("GC: -- [type] had initialize() called after qdel() --")
/atom/movable/Bump(var/atom/A, yes)
if(src.throwing)
@@ -210,7 +211,7 @@
/atom/movable/overlay/New()
for(var/x in src.verbs)
src.verbs -= x
return
..()
/atom/movable/overlay/attackby(a, b)
if (src.master)
+1
View File
@@ -53,6 +53,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
New()
..()
var/startx = 0
var/starty = 0
var/endy = 0
+1
View File
@@ -12,6 +12,7 @@ datum/objective
all_objectives |= src
if(text)
explanation_text = text
..()
Destroy()
all_objectives -= src
+1 -1
View File
@@ -16,7 +16,7 @@
recipe.resources = list()
for(var/material in I.matter)
recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle.
qdel(I)
qdel(I)
/datum/autolathe/recipe
var/name = "object"
+2
View File
@@ -409,6 +409,7 @@
read_only = 1
New()
..()
initializeDisk()
buf.types=DNA2_BUF_UE|DNA2_BUF_UI
//data = "066000033000000000AF00330660FF4DB002690"
@@ -424,6 +425,7 @@
read_only = 1
New()
..()
initializeDisk()
buf.types=DNA2_BUF_SE
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4)
@@ -17,6 +17,7 @@
possibleNets["Cargo"] = access_qm
possibleNets["Research"] = access_rd
possibleNets["Medbay"] = access_cmo
..()
proc/updateBuildPath()
build_path = null
+1
View File
@@ -100,6 +100,7 @@
if(content)
if(file_increment > 1)
volume = round(file_increment * length(content))
..()
/*
A generic file that contains text
+1 -1
View File
@@ -134,7 +134,7 @@ Class Procs:
if(contents) // The same for contents.
for(var/atom/A in contents)
qdel(A)
..()
return ..()
/obj/machinery/process()//If you dont use process or power why are you here
if(!(use_power || idle_power_usage || active_power_usage))
+1 -2
View File
@@ -19,9 +19,8 @@
src.product_path = path
if(!name)
var/atom/tmp = new path
var/atom/tmp = path
src.product_name = initial(tmp.name)
qdel(tmp)
else
src.product_name = name
@@ -123,7 +123,6 @@ steam.start() -- spawns the effect
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
return
/datum/effect/effect/system/spark_spread
var/total_sparks = 0 // To stop it being spammed and lagging!
@@ -188,7 +187,6 @@ steam.start() -- spawns the effect
..()
spawn (time_to_live)
qdel(src)
return
/obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob )
..()
+45 -34
View File
@@ -5,6 +5,7 @@
anchored = 1.0
unacidable = 1
simulated = 0
var/delete_me = 0
/obj/effect/landmark/New()
..()
@@ -14,29 +15,31 @@
switch(name) //some of these are probably obsolete
if("monkey")
monkeystart += loc
qdel(src)
delete_me = 1
return
if("start")
newplayer_start += loc
qdel(src)
delete_me = 1
return
if("JoinLate")
latejoin += loc
qdel(src)
delete_me = 1
return
if("JoinLateGateway")
latejoin_gateway += loc
qdel(src)
delete_me = 1
return
if("JoinLateCryo")
latejoin_cryo += loc
qdel(src)
delete_me = 1
return
if("JoinLateCyborg")
latejoin_cyborg += loc
qdel(src)
delete_me = 1
return
if("prisonwarp")
prisonwarp += loc
qdel(src)
delete_me = 1
return
if("Holding Facility")
holdingfacility += loc
@@ -50,24 +53,32 @@
tdomeobserve += loc
if("prisonsecuritywarp")
prisonsecuritywarp += loc
qdel(src)
delete_me = 1
return
if("xeno_spawn")
xeno_spawn += loc
qdel(src)
delete_me = 1
return
if("endgame_exit")
endgame_safespawns += loc
qdel(src)
delete_me = 1
return
if("bluespacerift")
endgame_exits += loc
qdel(src)
delete_me = 1
return
landmarks_list += src
return 1
/obj/effect/landmark/proc/delete()
delete_me = 1
/obj/effect/landmark/initialize()
..()
if(delete_me)
qdel(src)
/obj/effect/landmark/Destroy()
landmarks_list -= src
return ..()
@@ -91,51 +102,51 @@
var/list/options = typesof(/obj/effect/landmark/costume)
var/PICK= options[rand(1,options.len)]
new PICK(src.loc)
qdel(src)
delete_me = 1
//SUBCLASSES. Spawn a bunch of items and disappear likewise
/obj/effect/landmark/costume/chicken/New()
new /obj/item/clothing/suit/chickensuit(src.loc)
new /obj/item/clothing/head/chicken(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/gladiator/New()
new /obj/item/clothing/under/gladiator(src.loc)
new /obj/item/clothing/head/helmet/gladiator(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/nyangirl/New()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/maid/New()
new /obj/item/clothing/under/blackskirt(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/scratch/New()
new /obj/item/clothing/gloves/white(src.loc)
@@ -143,12 +154,12 @@
new /obj/item/clothing/under/scratch(src.loc)
if (prob(30))
new /obj/item/clothing/head/cueball(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/highlander/New()
new /obj/item/clothing/under/kilt(src.loc)
new /obj/item/clothing/head/beret(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/suit/wcoat(src.loc)
@@ -159,24 +170,24 @@
new /obj/item/weapon/cane(src.loc)
new /obj/item/clothing/under/sl_suit(src.loc)
new /obj/item/clothing/mask/fakemoustache(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/plaguedoctor/New()
new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
new /obj/item/clothing/head/plaguedoctorhat(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/nightowl/New()
new /obj/item/clothing/under/owl(src.loc)
new /obj/item/clothing/mask/gas/owl_mask(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/waiter/New()
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/pirate/New()
new /obj/item/clothing/under/pirate(src.loc)
@@ -184,46 +195,46 @@
var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/eyepatch(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/commie/New()
new /obj/item/clothing/under/soviet(src.loc)
new /obj/item/clothing/head/ushanka(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/imperium_monk/New()
new /obj/item/clothing/suit/imperium_monk(src.loc)
if (prob(25))
new /obj/item/clothing/mask/gas/cyborg(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/holiday_priest/New()
new /obj/item/clothing/suit/holidaypriest(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/marisawizard/fake/New()
new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/cutewitch/New()
new /obj/item/clothing/under/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
new /obj/item/weapon/staff/broom(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/fakewizard/New()
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
new /obj/item/weapon/staff/(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/sexyclown/New()
new /obj/item/clothing/mask/gas/sexyclown(src.loc)
new /obj/item/clothing/under/sexyclown(src.loc)
qdel(src)
delete_me = 1
/obj/effect/landmark/costume/sexymime/New()
new /obj/item/clothing/mask/gas/sexymime(src.loc)
new /obj/item/clothing/under/sexymime(src.loc)
qdel(src)
delete_me = 1
@@ -12,9 +12,6 @@
var/syndie = 0
var/list/channels = list()
/obj/item/device/encryptionkey/New()
/obj/item/device/encryptionkey/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/encryptionkey/syndicate
@@ -37,6 +37,7 @@
/obj/item/weapon/extinguisher/New()
create_reagents(max_water)
reagents.add_reagent("water", max_water)
..()
/obj/item/weapon/extinguisher/examine(mob/user)
if(..(user, 0))
+4 -3
View File
@@ -73,7 +73,7 @@
if (prob(75))
src.pixel_y = rand(0, 16)
return
..()
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M) || user.a_intent == "help")
@@ -108,6 +108,7 @@
if(prob(50))
icon_state = "cutters-y"
item_state = "cutters_yellow"
..()
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
if(user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
@@ -156,12 +157,12 @@
reagents = R
R.my_atom = src
R.add_reagent("fuel", max_fuel)
return
..()
/obj/item/weapon/weldingtool/Destroy()
if(welding)
processing_objects -= src
..()
return ..()
/obj/item/weapon/weldingtool/examine(mob/user)
if(..(user, 0))
+3 -1
View File
@@ -11,9 +11,11 @@
..()
if (!prob(spawn_nothing_percentage))
spawn_item()
/obj/random/initialize()
..()
qdel(src)
// this function should return a specific item to spawn
/obj/random/proc/item_to_spawn()
return 0
@@ -22,7 +22,7 @@
/obj/structure/closet/emcloset/New()
..()
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0)))
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
if ("small")
new /obj/item/weapon/tank/emergency_oxygen(src)
new /obj/item/weapon/tank/emergency_oxygen(src)
@@ -51,17 +51,6 @@
new /obj/item/clothing/suit/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
if ("nothing")
// doot
// teehee - Ah, tg coders...
if ("delete")
qdel(src)
//If you want to re-add fire, just add "fire" = 15 to the pick list.
/*if ("fire")
new /obj/structure/closet/firecloset(src.loc)
qdel(src)*/
/obj/structure/closet/emcloset/legacy/New()
..()
+1 -1
View File
@@ -9,7 +9,7 @@
layer = 2.3 //under pipes
// flags = CONDUCT
/obj/structure/lattice/New()
/obj/structure/lattice/initialize()
..()
///// Z-Level Stuff
if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open)))
+1 -1
View File
@@ -12,7 +12,7 @@
/obj/structure/mopbucket/New()
create_reagents(100)
..()
/obj/structure/mopbucket/examine(mob/user)
if(..(user, 1))
+1
View File
@@ -88,6 +88,7 @@
var/list/ammo_states = list() //values
/obj/item/ammo_magazine/New()
..()
if(multiple_sprites)
initialize_magazine_icondata(src)
+7 -11
View File
@@ -727,17 +727,13 @@ CIRCUITS BELOW
/datum/design/circuit/AssembleDesignName()
..()
if(build_path)
var/obj/item/weapon/circuitboard/C = new build_path()
if(C && istype(C))
if(C.board_type == "machine")
name = "Machine circuit design ([item_name])"
qdel(C)
return
else if(C.board_type == "computer")
name = "Computer circuit design ([item_name])"
qdel(C)
return
name = "Circuit design ([item_name])"
var/obj/item/weapon/circuitboard/C = build_path
if(initial(C.board_type) == "machine")
name = "Machine circuit design ([item_name])"
else if(initial(C.board_type) == "computer")
name = "Computer circuit design ([item_name])"
else
name = "Circuit design ([item_name])"
/datum/design/circuit/AssembleDesignDesc()
if(!desc)
+2 -3
View File
@@ -51,8 +51,9 @@
visible_message("<span class='warning'>\The [src] breaks down!</span>")
return break_to_parts() // if we break and form shards, return them to the caller to do !FUN! things with
/obj/structure/table/New()
/obj/structure/table/initialize()
..()
// One table per turf.
for(var/obj/structure/table/T in loc)
if(T != src)
@@ -61,8 +62,6 @@
break_to_parts(full_return = 1)
return
/obj/structure/table/initialize()
..()
// reset color/alpha, since they're set for nice map previews
color = "#ffffff"
alpha = 255
+5
View File
@@ -24,6 +24,11 @@ var/global/datum/global_init/init = new ()
qdel(src) //we're done
/datum/global_init/init_observers()
return
/datum/global_init/destroy_observers()
return
/world
mob = /mob/new_player