mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
33 lines
1001 B
Plaintext
33 lines
1001 B
Plaintext
/**
|
|
Stack End Detector.
|
|
Can detect if a given code stack has exited, used by the mc for stack overflow detection.
|
|
|
|
**/
|
|
/datum/stack_end_detector
|
|
var/datum/weakref/_WF
|
|
var/datum/stack_canary/_canary
|
|
|
|
/datum/stack_end_detector/New()
|
|
_canary = new()
|
|
_WF = WEAKREF(_canary)
|
|
|
|
/** Prime the stack overflow detector.
|
|
Store the return value of this proc call in a proc level var.
|
|
Can only be called once.
|
|
**/
|
|
/datum/stack_end_detector/proc/prime_canary()
|
|
if (!_canary)
|
|
CRASH("Prime_canary called twice")
|
|
. = _canary
|
|
_canary = null
|
|
|
|
/// Returns true if the stack is still going. Calling before the canary has been primed also returns true
|
|
/datum/stack_end_detector/proc/check()
|
|
return !!_WF.resolve()
|
|
|
|
/// Stack canary. Will go away if the stack it was primed by is ended by byond for return or stack overflow reasons.
|
|
/datum/stack_canary
|
|
|
|
/// empty proc to avoid warnings about unused variables. Call this proc on your canary in the stack it's watching.
|
|
/datum/stack_canary/proc/use_variable()
|