diff --git a/code/controllers/subsystem/SSinput.dm b/code/controllers/subsystem/SSinput.dm index 4e4e27477fc..0ee76429738 100644 --- a/code/controllers/subsystem/SSinput.dm +++ b/code/controllers/subsystem/SSinput.dm @@ -22,6 +22,8 @@ SUBSYSTEM_DEF(input) return "P: [length(processing)]" /datum/controller/subsystem/input/fire(resumed = FALSE) + // Sleeps in input handling are bad, because they can stall the entire subsystem indefinitely, breaking most movement. key_loop has SHOULD_NOT_SLEEP(TRUE), which helps, but it doesn't catch everything, so we also waitfor=FALSE here, as using INVOKE_ASYNC here is very unperformant. + set waitfor = FALSE var/list/to_cull for(var/client/C in processing) if(processing[C] + AUTO_CULL_TIME < world.time) diff --git a/code/modules/input/input.dm b/code/modules/input/input.dm index 4600c311fb8..36aafd6a61b 100644 --- a/code/modules/input/input.dm +++ b/code/modules/input/input.dm @@ -5,6 +5,8 @@ return /datum/proc/key_loop(client/C) + // Sleeps in input handling are bad, because they can stall the entire subsystem indefinitely, breaking most movement. The subsystem sets waitfor=FALSE, which works around this, but we'd rather avoid the sleeps in the first place. + SHOULD_NOT_SLEEP(TRUE) return /client/key_loop()