summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quickfix.c20
-rw-r--r--src/testdir/test_quickfix.vim19
-rw-r--r--src/version.c2
3 files changed, 38 insertions, 3 deletions
diff --git a/src/quickfix.c b/src/quickfix.c
index 8dfad2ec84..2a96240aa6 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1795,8 +1795,19 @@ win_found:
oldwin == curwin ? curwin : NULL);
}
else
+ {
ok = buflist_getfile(qf_ptr->qf_fnum,
(linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+ if (qi != &ql_info && !win_valid(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+ ok = FALSE;
+ qi = NULL;
+ qf_ptr = NULL;
+ opened_window = FALSE;
+ }
+ }
+
}
if (ok == OK)
@@ -1899,7 +1910,7 @@ win_found:
if (opened_window)
win_close(curwin, TRUE); /* Close opened window */
#endif
- if (qf_ptr->qf_fnum != 0)
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0)
{
/*
* Couldn't open file, so put index back where it was. This could
@@ -1913,8 +1924,11 @@ failed:
}
}
theend:
- qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
- qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ if (qi != NULL)
+ {
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
+ qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ }
#ifdef FEAT_WINDOWS
if (p_swb != old_swb && opened_window)
{
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 5982aeef1b..22a7e67324 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -495,3 +495,22 @@ function Test_locationlist()
augroup! testgroup
endfunction
+
+function Test_locationlist_curwin_was_closed()
+ augroup testgroup
+ au!
+ autocmd BufReadCmd t call R(expand("<amatch>"))
+ augroup END
+
+ function R(n)
+ quit
+ endfunc
+
+ new
+ let q = []
+ call add(q, {'filename': 't' })
+ call setloclist(0, q)
+ call assert_fails('lrewind', 'E924:')
+
+ augroup! testgroup
+endfunction
diff --git a/src/version.c b/src/version.c
index f2e7d67fcd..409a9f40ba 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1592,
+/**/
1591,
/**/
1590,