Skip to content

Commit

Permalink
win, tty: fix problem of receiving unexpected SIGWINCH
Browse files Browse the repository at this point in the history
Fix an issue where WINDOWS_BUFFER_SIZE_EVENT occurs and unexpected
SIGWINCH is received before calling
uv__tty_console_resize_message_loop_thread.

Refs: neovim/neovim#10978 (comment)
PR-URL: libuv#2478
Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
Reviewed-By: Saúl Ibarra Corretgé <s@saghul.net>
  • Loading branch information
erw7 authored and saghul committed Sep 25, 2019
1 parent 75075d6 commit 5013042
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions src/win/tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,15 @@ void uv_console_init(void) {
0,
0);
if (uv__tty_console_handle != INVALID_HANDLE_VALUE) {
CONSOLE_SCREEN_BUFFER_INFO sb_info;
QueueUserWorkItem(uv__tty_console_resize_message_loop_thread,
NULL,
WT_EXECUTELONGFUNCTION);
uv_mutex_init(&uv__tty_console_resize_mutex);
if (GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info)) {
uv__tty_console_width = sb_info.dwSize.X;
uv__tty_console_height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1;
}
}
}

Expand Down Expand Up @@ -2290,17 +2295,10 @@ static void uv__determine_vterm_state(HANDLE handle) {
}

static DWORD WINAPI uv__tty_console_resize_message_loop_thread(void* param) {
CONSOLE_SCREEN_BUFFER_INFO sb_info;
NTSTATUS status;
ULONG_PTR conhost_pid;
MSG msg;

if (!GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info))
return 0;

uv__tty_console_width = sb_info.dwSize.X;
uv__tty_console_height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1;

if (pSetWinEventHook == NULL || pNtQueryInformationProcess == NULL)
return 0;

Expand Down Expand Up @@ -2375,6 +2373,7 @@ static void uv__tty_console_signal_resize(void) {
height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1;

uv_mutex_lock(&uv__tty_console_resize_mutex);
assert(uv__tty_console_width != -1 && uv__tty_console_height != -1);
if (width != uv__tty_console_width || height != uv__tty_console_height) {
uv__tty_console_width = width;
uv__tty_console_height = height;
Expand Down

0 comments on commit 5013042

Please sign in to comment.