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;
 	}
+    }
 }
 
 /*
--- 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,