commit 52991d8728c876366cd28f75be29ee579a0a8605
parent 981d4ba45ed1169b305d8b96f04062ae997ddd43
Author: Emanuel Krollmann <115734183+Sodastream11@users.noreply.github.com>
Date: Mon, 2 Jun 2025 00:23:42 +0200
fix(windows): don't set window icon on SIGHUP #34260
Problem: When using conhost and pressing the 'x' button
to close it while nvim is open, nvim hangs up
while trying to reset the window icon, causing a big
delay before the terminal actually closes. #34171
Solution: Set the window handle to NULL after receiving SIGHUP
so that nvim will not try resetting the icon.
Diffstat:
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/nvim/os/os_win_console.c b/src/nvim/os/os_win_console.c
@@ -29,6 +29,11 @@ int os_open_conin_fd(void)
return conin_fd;
}
+void os_clear_hwnd(void)
+{
+ hWnd = NULL;
+}
+
void os_replace_stdin_to_conin(void)
{
close(STDIN_FILENO);
diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c
@@ -23,6 +23,10 @@
# include "nvim/memline.h"
#endif
+#ifdef MSWIN
+# include "nvim/os/os_win_console.h"
+#endif
+
static SignalWatcher spipe, shup, squit, sterm, susr1, swinch, ststp;
#ifdef SIGPWR
static SignalWatcher spwr;
@@ -219,11 +223,14 @@ static void on_signal(SignalWatcher *handle, int signum, void *data)
}
break;
#endif
+ case SIGHUP:
+#ifdef MSWIN
+ os_clear_hwnd();
+#endif
case SIGTERM:
#ifdef SIGQUIT
case SIGQUIT:
#endif
- case SIGHUP:
if (!rejecting_deadly) {
deadly_signal(signum);
}