Prevent sleeps in key handling from blocking SSinput (#26761)

* Prevent sleeps in Move from blocking SSinput

* Switch to watifor = FALSE

* Move SHOULD_NOT_SLEEP

* Whoops, that one's a redefine, too.
This commit is contained in:
Charlie Nolan
2024-09-29 03:54:31 -07:00
committed by GitHub
parent 882b1e4a0b
commit d6529434ff
2 changed files with 4 additions and 0 deletions
+2
View File
@@ -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)
+2
View File
@@ -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()