1
0
forked from aniani/vim

patch 8.1.1675: listener list not correctly updated on listener_remove()

Problem:    Listener list not correctly updated on listener_remove().
Solution:   Only set "prev" when not removing a listener.  Return one if the
            listener was found and removed.
This commit is contained in:
Bram Moolenaar
2019-07-13 13:03:02 +02:00
parent 4e63f9425e
commit 7b73f914c4
2 changed files with 9 additions and 2 deletions

View File

@@ -325,15 +325,17 @@ f_listener_flush(typval_T *argvars, typval_T *rettv UNUSED)
* listener_remove() function
*/
void
f_listener_remove(typval_T *argvars, typval_T *rettv UNUSED)
f_listener_remove(typval_T *argvars, typval_T *rettv)
{
listener_T *lnr;
listener_T *next;
listener_T *prev = NULL;
listener_T *prev;
int id = tv_get_number(argvars);
buf_T *buf;
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
{
prev = NULL;
for (lnr = buf->b_listener; lnr != NULL; lnr = next)
{
next = lnr->lr_next;
@@ -345,9 +347,12 @@ f_listener_remove(typval_T *argvars, typval_T *rettv UNUSED)
buf->b_listener = lnr->lr_next;
free_callback(&lnr->lr_callback);
vim_free(lnr);
rettv->vval.v_number = 1;
return;
}
prev = lnr;
}
}
}
/*

View File

@@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1675,
/**/
1674,
/**/