patch 7.4.2018
Problem: buf_valid() can be slow when there are many buffers.
Solution: Add bufref_valid(), only go through the buffer list when a buffer
was freed.
diff --git a/src/quickfix.c b/src/quickfix.c
index 065216a..1e5abc6 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1487,7 +1487,7 @@
* to make this a lot faster if there are multiple matches in the same file.
*/
static char_u *qf_last_bufname = NULL;
-static buf_T *qf_last_buf = NULL;
+static bufref_T qf_last_bufref = {NULL, 0};
/*
* Get buffer number for file "dir.name".
@@ -1536,9 +1536,9 @@
bufname = fname;
if (qf_last_bufname != NULL && STRCMP(bufname, qf_last_bufname) == 0
- && buf_valid(qf_last_buf))
+ && bufref_valid(&qf_last_bufref))
{
- buf = qf_last_buf;
+ buf = qf_last_bufref.br_buf;
vim_free(ptr);
}
else
@@ -1549,7 +1549,7 @@
qf_last_bufname = bufname;
else
qf_last_bufname = vim_strsave(bufname);
- qf_last_buf = buf;
+ set_bufref(&qf_last_bufref, buf);
}
if (buf == NULL)
return 0;