This removes the global Sleep(1) workaround that was originally added to prevent memory leaks caused by tight polling loops.
While it helped with the mai2 memory leak, introducing artificial latency here negatively impacts other UART devices (e.g., breaking slider inputs in chusan). The proper fix has now been implemented downstream in `segatools` by rate-limiting the specific `led15070` board instead. Therefore, this global hack is no longer needed and can be safely removed.
Reviewed-on: https://gitea.tendokyu.moe/TeamTofuShop/capnhook/pulls/6
Co-authored-by: Gl0w1amp <gl0w1amp@noreply.gitea.tendokyu.moe>
Co-committed-by: Gl0w1amp <gl0w1amp@noreply.gitea.tendokyu.moe>
Added Sleep(1) to uart_handle_read when no data is available to simulate
hardware I/O latency. This prevents the hook from entering a tight polling
loop, which was causing high CPU usage and massive memory leaks.
The loop this commit removed tries to sleep and wait for the IO DLL
to write something to uart->readable. It doesn't work for two reasons:
1. When uart_handle_read() is sleeping, its caller holds the lock
for the resource, meaning nothing can be writen, and it always times out.
2. Even without the deadlock problem, due to timer resolution limit
on Windows, Sleep(1) does not actually sleep 1ms.
Instead it sleeps over 15ms by default.
The symptom is a noticable input lag, and lost inputs.
This commit tries to fix that.
Reviewed-on: https://gitea.tendokyu.moe/TeamTofuShop/capnhook/pulls/2
Co-authored-by: octocat <git.rascal570@passinbox.com>
Co-committed-by: octocat <git.rascal570@passinbox.com>