diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2015-01-12 08:59:51 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2015-01-12 09:47:42 -0300 |
commit | a16cd73eadf473e3f2da104e2620680c4b5dd9d6 (patch) | |
tree | 3d0fd52a5540260af2d6e8c3900da5ed728b6b21 /src | |
parent | 418a49f7f1eb5c6a5235cbf34852212899ea4a06 (diff) | |
download | rneovim-a16cd73eadf473e3f2da104e2620680c4b5dd9d6.tar.gz rneovim-a16cd73eadf473e3f2da104e2620680c4b5dd9d6.tar.bz2 rneovim-a16cd73eadf473e3f2da104e2620680c4b5dd9d6.zip |
ui: Fix redraw bug caused by race conditions with remote clients
Before sending a resize command to the UIs, flush the current output buffer to
ensure no redraw commands for a screen with invalid size are processed.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/screen.c | 3 | ||||
-rw-r--r-- | src/nvim/term.c | 6 | ||||
-rw-r--r-- | src/nvim/ui.c | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index a3b1b4d433..b593d5a687 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -8186,6 +8186,9 @@ void screen_resize(int width, int height, int mustset) check_shellsize(); if (abstract_ui) { + // Clear the output buffer to ensure UIs don't receive redraw command meant + // for invalid screen sizes. + out_buf_clear(); ui_resize(width, height); } else { mch_set_shellsize(); diff --git a/src/nvim/term.c b/src/nvim/term.c index 15ced48d91..6459be9703 100644 --- a/src/nvim/term.c +++ b/src/nvim/term.c @@ -1818,6 +1818,12 @@ void term_write(char_u *s, size_t len) static char_u out_buf[OUT_SIZE + 1]; static int out_pos = 0; /* number of chars in out_buf */ +// Clear the output buffer +void out_buf_clear(void) +{ + out_pos = 0; +} + /* * out_flush(): flush the output buffer */ diff --git a/src/nvim/ui.c b/src/nvim/ui.c index d66be0f8df..80dbea31cb 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -170,7 +170,7 @@ void ui_refresh(void) return; } - width = height = INT_MAX; + int width = INT_MAX, height = INT_MAX; for (size_t i = 0; i < ui_count; i++) { UI *ui = uis[i]; |