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.
This commit is contained in:
Thiago de Arruda 2015-01-12 08:59:51 -03:00
parent 418a49f7f1
commit a16cd73ead
3 changed files with 10 additions and 1 deletions

View File

@ -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();

View File

@ -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
*/

View File

@ -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];