diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index e81e90dd974..a2a65683d72 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -282,6 +282,8 @@ SUBSYSTEM_DEF(garbage) qdel(D, force) #endif +/proc/KillMeIn512(sendsignal) + return 1 // Should be treated as a replacement for the 'del' keyword. // 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, ...) @@ -295,12 +297,17 @@ SUBSYSTEM_DEF(garbage) if(isnull(D.gc_destroyed)) - SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force) // Give the components a chance to prevent their parent from being deleted + #if DM_VERSION > 511 + #warn Remove the garbage bypass code below + #endif + var/Removein512 = SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force) // Give the components a chance to prevent their parent from being deleted + KillMeIn512(Removein512) D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/start_tick = world.tick_usage var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy + var/Removein512too = SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy + KillMeIn512(Removein512too) if(world.time != start_time) I.slept_destroy++ else diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 7621828d970..43fa6f23f78 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -56,7 +56,11 @@ if(!force) _RemoveFromParent() if(!silent) - SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) + #if DM_VERSION > 511 + #warn Remove the garbage bypass code below + #endif + var/Removein512 = SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) + KillMeIn512(Removein512) parent = null for(var/target in signal_procs) UnregisterSignal(target, signal_procs[target]) @@ -258,7 +262,11 @@ new_comp = new nt(arglist(args)) // Dupes are allowed, act like normal if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy - SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) + #if DM_VERSION > 511 + #warn Remove the garbage bypass code below + #endif + var/Removein512 = SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) + KillMeIn512(Removein512) return new_comp return old_comp @@ -278,7 +286,11 @@ qdel(C) return C._RemoveFromParent() - SEND_SIGNAL(helicopter, COMSIG_COMPONENT_REMOVING, C) + #if DM_VERSION > 511 + #warn Remove the garbage bypass code below + #endif + var/Removein512 = SEND_SIGNAL(helicopter, COMSIG_COMPONENT_REMOVING, C) + KillMeIn512(Removein512) C.parent = src if(C == AddComponent(C)) C._JoinParent() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c0da13073fd..94fc46d463b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -282,8 +282,11 @@ to_chat(user, "[reagents.total_volume] units of various reagents.") else to_chat(user, "Nothing.") - - SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user) + #if DM_VERSION > 511 + #warn Remove the garbage bypass code below + #endif + var/Removein512 = SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user) + KillMeIn512(Removein512) return distance == -1 || (get_dist(src, user) <= distance) || isobserver(user) //observers do not have a range limit