summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-07-13 13:03:02 +0200
committerBram Moolenaar <Bram@vim.org>2019-07-13 13:03:02 +0200
commit7b73f914c4fc5a3f7ad97b678cc8137f964e3d62 (patch)
tree241abb8cf378c3157fd818d1c7bd71a91604a345
parent4e63f9425e6623aec4cd016af6def0b354b935f1 (diff)
patch 8.1.1675: listener list not correctly updated on listener_remove()v8.1.1675
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.
-rw-r--r--src/change.c9
-rw-r--r--src/version.c2
2 files changed, 9 insertions, 2 deletions
diff --git a/src/change.c b/src/change.c
index b928786eb0..761e764f85 100644
--- a/src/change.c
+++ b/src/change.c
@@ -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;
}
+ }
}
/*
diff --git a/src/version.c b/src/version.c
index 04a2e6826d..7e3c180592 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1675,
+/**/
1674,
/**/
1673,