diff src/diff.c @ 29293:bf4d7898cf93 v8.2.5163

patch 8.2.5163: crash when deleting buffers in diff mode Commit: https://github.com/vim/vim/commit/cd38bb4d83c942c4bad596835c6766cbf32e5195 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 26 14:04:07 2022 +0100 patch 8.2.5163: crash when deleting buffers in diff mode Problem: Crash when deleting buffers in diff mode. Solution: Recompute diffs later. Skip window without a valid buffer.
author Bram Moolenaar <Bram@vim.org>
date Sun, 26 Jun 2022 15:15:03 +0200
parents 4dcccb2673fe
children 92dd6fef5ace
line wrap: on
line diff
--- a/src/diff.c
+++ b/src/diff.c
@@ -119,7 +119,12 @@ diff_buf_delete(buf_T *buf)
 	    tp->tp_diffbuf[i] = NULL;
 	    tp->tp_diff_invalid = TRUE;
 	    if (tp == curtab)
-		diff_redraw(TRUE);
+	    {
+		// don't redraw right away, more might change or buffer state
+		// is invalid right now
+		need_diff_redraw = TRUE;
+		redraw_later(VALID);
+	    }
 	}
     }
 }
@@ -670,7 +675,8 @@ diff_redraw(
 
     need_diff_redraw = FALSE;
     FOR_ALL_WINDOWS(wp)
-	if (wp->w_p_diff)
+	// when closing windows or wiping buffers skip invalid window
+	if (wp->w_p_diff && buf_valid(wp->w_buffer))
 	{
 	    redraw_win_later(wp, SOME_VALID);
 	    if (wp != curwin)