mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0770: quickfix commands may keep memory allocated
Problem: Quickfix commands may keep memory allocated. Solution: Free memory when it's a bit much. (Yegappan Lakshmanan, closes #11379)
This commit is contained in:
parent
db4c94788a
commit
d8cd6f7427
@ -236,12 +236,28 @@ qfga_get(void)
|
|||||||
ga_init2(&qfga, 1, 256);
|
ga_init2(&qfga, 1, 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retain ga_data from previous use. Reset the length to zero.
|
// Reset the length to zero. Retain ga_data from previous use to avoid
|
||||||
|
// many alloc/free calls.
|
||||||
qfga.ga_len = 0;
|
qfga.ga_len = 0;
|
||||||
|
|
||||||
return &qfga;
|
return &qfga;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The "qfga" grow array buffer is reused across multiple quickfix commands as
|
||||||
|
* a temporary buffer to reduce the number of alloc/free calls. But if the
|
||||||
|
* buffer size is large, then to avoid holding on to that memory, clear the
|
||||||
|
* grow array. Otherwise just reset the grow array length.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
qfga_clear(void)
|
||||||
|
{
|
||||||
|
if (qfga.ga_maxlen > 1000)
|
||||||
|
ga_clear(&qfga);
|
||||||
|
else
|
||||||
|
qfga.ga_len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximum number of bytes allowed per line while reading a errorfile.
|
* Maximum number of bytes allowed per line while reading a errorfile.
|
||||||
*/
|
*/
|
||||||
@ -3335,6 +3351,8 @@ qf_jump_print_msg(
|
|||||||
msg_scroll = FALSE;
|
msg_scroll = FALSE;
|
||||||
msg_attr_keep((char *)gap->ga_data, 0, TRUE);
|
msg_attr_keep((char *)gap->ga_data, 0, TRUE);
|
||||||
msg_scroll = i;
|
msg_scroll = i;
|
||||||
|
|
||||||
|
qfga_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3744,6 +3762,7 @@ qf_list(exarg_T *eap)
|
|||||||
|
|
||||||
ui_breakcheck();
|
ui_breakcheck();
|
||||||
}
|
}
|
||||||
|
qfga_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4820,6 +4839,8 @@ qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last, int qf_winid)
|
|||||||
if (old_last == NULL)
|
if (old_last == NULL)
|
||||||
// Delete the empty line which is now at the end
|
// Delete the empty line which is now at the end
|
||||||
(void)ml_delete(lnum + 1);
|
(void)ml_delete(lnum + 1);
|
||||||
|
|
||||||
|
qfga_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// correct cursor position
|
// correct cursor position
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
770,
|
||||||
/**/
|
/**/
|
||||||
769,
|
769,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user