]> granicus.if.org Git - vim/commitdiff
patch 8.0.0619: GUI gets stuck if timer uses feedkeys() v8.0.0619
authorBram Moolenaar <Bram@vim.org>
Mon, 5 Jun 2017 11:31:56 +0000 (13:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 5 Jun 2017 11:31:56 +0000 (13:31 +0200)
Problem:    In the GUI, when a timer uses feedkeys(), it still waits for an
            event. (Raymond Ko)
Solution:   Check tb_change_cnt in one more place.

src/gui.c
src/version.c

index 7d44db1df9df4343f74761b44c60105b5d779053..25310aafd48f282fab909591f0feef5e363297b5 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -2849,6 +2849,10 @@ gui_insert_lines(int row, int count)
     }
 }
 
+/*
+ * Returns OK if a character was found to be available within the given time,
+ * or FAIL otherwise.
+ */
     static int
 gui_wait_for_chars_or_timer(long wtime)
 {
@@ -2869,16 +2873,16 @@ gui_wait_for_chars_or_timer(long wtime)
        if (typebuf.tb_change_cnt != tb_change_cnt)
        {
            /* timer may have used feedkeys() */
-           return FALSE;
+           return FAIL;
        }
        if (due_time <= 0 || (wtime > 0 && due_time > remaining))
            due_time = remaining;
        if (gui_mch_wait_for_chars(due_time))
-           return TRUE;
+           return OK;
        if (wtime > 0)
            remaining -= due_time;
     }
-    return FALSE;
+    return FAIL;
 #else
     return gui_mch_wait_for_chars(wtime);
 #endif
@@ -2896,6 +2900,7 @@ gui_wait_for_chars_or_timer(long wtime)
 gui_wait_for_chars(long wtime)
 {
     int            retval;
+    int            tb_change_cnt = typebuf.tb_change_cnt;
 
 #ifdef FEAT_MENU
     /*
@@ -2953,7 +2958,7 @@ gui_wait_for_chars(long wtime)
     }
 #endif
 
-    if (retval == FAIL)
+    if (retval == FAIL && typebuf.tb_change_cnt == tb_change_cnt)
     {
        /* Blocking wait. */
        before_blocking();
index fa8b538a8cd39fbe03737195baed12c125d0f14b..3d914953297b86872311a23536fe8aca38ffeeed 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    619,
 /**/
     618,
 /**/