On Wed Jan 17 15:40:53 2024 +0000, Zebediah Figura wrote:
My problem is processes that *continue* to do something externally visible without assistance from the server. A nontrivial portion of syscalls doesn't actually require the server to work; for example, NtWriteFile() can work with fd cache alone as long as it doesn't need to send completion to the server. I don't think this is a meaningful concern? Other syscalls that *do* contact server will just return `STATUS_THREAD_IS_TERMINATING`, which has ample possibility to confuse the app which won't voluntarily terminate by itself and will continue doing something weird externally.
I think calling `raise(SIGQUIT);` just before returning `STATUS_THREAD_IS_TERMINATING` will fix all that, while still achieving your purpose. If the server has already sent SIGQUIT, this has virtually no effect; otherwise, the signal will be delievered once we unblock it later. That probably makes sense, though. `receive_fd` is called while `fd_cache_mutex` is held and has `abort_thread(0);` too; maybe it needs similar treatment? It does, but it doesn't affect this application. I don't know if should be added to the series for code freeze in that case. We're past the code freeze now. Do you think this is worth revisiting?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4811#note_57708