fix(lifecycle): ignore signals during os_exit

Problem:
SIGTERM received during `os_exit()` can cause it to "nest":

    os_exit src/nvim/main.c:720
    preserve_exit src/nvim/main.c:910
    deadly_signal src/nvim/os/signal.c:205
    on_signal src/nvim/os/signal.c:240
    signal_event src/nvim/event/signal.c:45
    multiqueue_process_events src/nvim/event/multiqueue.c:159
    event_teardown src/nvim/main.c:178
    os_exit src/nvim/main.c:720

Solution:
Call `signal_reject_deadly()` at the start of `os_exit()` like
`preserve_exit()` already does.
This commit is contained in:
Justin M. Keyes
2026-08-18 17:50:28 +02:00
parent f238788601
commit c184ca2c68

View File

@@ -706,6 +706,8 @@ void os_exit(int r)
FUNC_ATTR_NORETURN
{
exiting = true;
// Avoid recursion in case SIGTERM arrives during `os_exit`.
signal_reject_deadly();
if (ui_client_channel_id) {
ui_client_stop();