]> granicus.if.org Git - vim/commitdiff
patch 8.0.1814: crash with terminal window and with 'lazyredraw' set v8.0.1814
authorBram Moolenaar <Bram@vim.org>
Fri, 11 May 2018 18:48:29 +0000 (20:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 11 May 2018 18:48:29 +0000 (20:48 +0200)
Problem:    Crash with terminal window and with 'lazyredraw' set. (Antoine)
Solution:   Check the terminal still exists after update_screen().

src/terminal.c
src/version.c

index 6e5b1002c2366f690a570cca8d78ba9ac3ee9113..8deac9da867de9f4f256c0904f0d34874b3d9e38 100644 (file)
@@ -38,6 +38,9 @@
  * in tl_scrollback are no longer used.
  *
  * TODO:
+ * - Win32: Termdebug doesn't work, because gdb does not support mi2.  This
+ *   plugin: https://github.com/cpiger/NeoDebug  runs gdb as a job, redirecting
+ *   input and output.  Command I/O is in gdb window.
  * - Win32: Redirecting input does not work, half of Test_terminal_redir_file()
  *   is disabled.
  * - Win32: Redirecting output works but includes escape sequences.
@@ -971,7 +974,10 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel)
        if (buffer == curbuf)
        {
            update_screen(0);
-           update_cursor(term, TRUE);
+           /* update_screen() can be slow, check the terminal wasn't closed
+            * already */
+           if (buffer == curbuf && curbuf->b_term != NULL)
+               update_cursor(curbuf->b_term, TRUE);
        }
        else
            redraw_after_callback(TRUE);
@@ -2100,6 +2106,10 @@ terminal_loop(int blocking)
            while (must_redraw != 0)
                if (update_screen(0) == FAIL)
                    break;
+       if (!term_use_loop_check(TRUE))
+           /* job finished while redrawing */
+           break;
+
        update_cursor(curbuf->b_term, FALSE);
        restore_cursor = TRUE;
 
index 966463a49e7a539526eab12c1410f14634e61561..918e192748605d8c9797e551fbde41ccb831a14c 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1814,
 /**/
     1813,
 /**/