From c184ca2c68abfc6864c7fc64d7b3c3e657afd7a8 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Tue, 18 Aug 2026 17:50:28 +0200 Subject: [PATCH] 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. --- src/nvim/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/nvim/main.c b/src/nvim/main.c index 467d9ddb54..b87f32fb90 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -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();