forked from aniani/vim
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.
This commit is contained in:
parent
0971c7a4e5
commit
cd38bb4d83
10
src/diff.c
10
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)
|
||||
|
@ -1603,5 +1603,17 @@ func Test_diff_scroll()
|
||||
call delete('Xright')
|
||||
endfunc
|
||||
|
||||
" This was trying to update diffs for a buffer being closed
|
||||
func Test_diff_only()
|
||||
silent! lfile
|
||||
set diff
|
||||
lopen
|
||||
norm o
|
||||
silent! norm o
|
||||
|
||||
set nodiff
|
||||
%bwipe!
|
||||
endfunc
|
||||
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
5163,
|
||||
/**/
|
||||
5162,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user