Calling proc from world/Error() Like, say, a time_stamp() proc causes the call to go thru, but control is never returned to world/Error().
Stack overflow runtimes happen at 200 proc calls iirc. stack overflow crashes happen around 500 proc calls, so 1 or 2 proc calls on top isn't going to harm anything, and world/Error() already gets bypassed if it runtimes. This behavior is unlikely to be intentional (especially since the proc call goes thru, it is only the returning of control back to world/Error() that fails.)
To deal with potential issues with stack overflows in world/Error() you could either give it a smaller leeway (even as low as 10 procs on top), or just say fuck it and declare that stack overflow crashes caused by world/Error() is an ID-TEN-T error and wash your hands of it and not add a limit.
but for the love of god, fix this bug!
Code Snippet (if applicable) to Reproduce Problem:
#ifdef DEBUG
/world/Error(exception/E, datum/e_src)
if(!istype(E)) //Something threw an unusual exception
log_world("Uncaught exception: [E]")
return ..()
log_world("[__LINE__]")
var/e_read = "[E]"
log_world("[__LINE__]")
var/e_name = "[E.name]"
log_world("[__LINE__]")
var/e_desc = "[E.desc]"
log_world("[__LINE__]")
var/e_file = "[E.file]"
log_world("[__LINE__]")
var/e_line = "[E.line]"
log_world("[__LINE__]")
log_world("/world/Error():[E] : [E.desc]|||[E.file]|||[E.line]")
log_world("[__LINE__]")
#endif
/proc/log_world(message)
world.log << message
/client/verb/stack_overflow()
.()
Expected Results:
7
9
11
13
15
...
Actual Results:
7
(log_world() is a proc because on /tg/ it also logs it to a file. most of our world/Error code is about skipping repeated runtimes, and redirecting the output to the log_world() proc so they log to both a file, as well as dd's output.)
Workaround:
https://github.com/tgstation/tgstation/pull/31900/files