aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2020-10-12 10:09:36 +0900
committererw7 <erw7.github@gmail.com>2020-10-13 11:44:15 +0900
commit2e70fee1e9da6ed044b207e9ec03bb5950846ef1 (patch)
tree71c44e4516bbe7069fa46fe0a7cc4bd037728467
parent3a597cb1a0c28480b8bf468339152252bcdf2c11 (diff)
downloadrneovim-2e70fee1e9da6ed044b207e9ec03bb5950846ef1.tar.gz
rneovim-2e70fee1e9da6ed044b207e9ec03bb5950846ef1.tar.bz2
rneovim-2e70fee1e9da6ed044b207e9ec03bb5950846ef1.zip
tui: fix problem with uv_tty_set_mode failing due to signal
fixes #12322.
-rw-r--r--src/nvim/tui/tui.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 3158aa0589..62d7dc8b18 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -316,7 +316,13 @@ static void terminfo_start(UI *ui)
#ifdef WIN32
uv_tty_set_mode(&data->output_handle.tty, UV_TTY_MODE_RAW);
#else
- uv_tty_set_mode(&data->output_handle.tty, UV_TTY_MODE_IO);
+ int retry_count = 10;
+ // A signal may cause uv_tty_set_mode() to fail (e.g., SIGCONT). Retry a
+ // few times. #12322
+ while (uv_tty_set_mode(&data->output_handle.tty, UV_TTY_MODE_IO) == UV_EINTR
+ && retry_count > 0) {
+ retry_count--;
+ }
#endif
} else {
uv_pipe_init(&data->write_loop, &data->output_handle.pipe, 0);