Mercurial > vim
changeset 17352:b2616a8be8a6 v8.1.1675
patch 8.1.1675: listener list not correctly updated on listener_remove()
commit https://github.com/vim/vim/commit/7b73f914c4fc5a3f7ad97b678cc8137f964e3d62
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jul 13 13:03:02 2019 +0200
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 13 Jul 2019 13:15:05 +0200 |
parents | 0d378fde48a1 |
children | c8a1757026ed |
files | src/change.c src/version.c |
diffstat | 2 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/change.c +++ b/src/change.c @@ -325,15 +325,17 @@ f_listener_flush(typval_T *argvars, typv * 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, typ buf->b_listener = lnr->lr_next; free_callback(&lnr->lr_callback); vim_free(lnr); + rettv->vval.v_number = 1; + return; } prev = lnr; } + } } /*