From: Bram Moolenaar Date: Sat, 13 Jul 2019 11:03:02 +0000 (+0200) Subject: patch 8.1.1675: listener list not correctly updated on listener_remove() X-Git-Tag: v8.1.1675 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7b73f914c4fc5a3f7ad97b678cc8137f964e3d62;p=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. --- diff --git a/src/change.c b/src/change.c index b928786eb..761e764f8 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 04a2e6826..7e3c18059 100644 --- a/src/version.c +++ b/src/version.c @@ -777,6 +777,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1675, /**/ 1674, /**/