From f10997a1543eb0724d882da3678bacd44e647141 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 3 Jan 2020 21:00:02 +0100 Subject: [PATCH] patch 8.2.0082: when reusing a buffer listeners are not cleared Problem: When reusing a buffer listeners are not cleared. (Axel Forsman) Solution: Clear listeners when reusing a buffer. (closes #5431) --- src/buffer.c | 1 + src/testdir/test_listener.vim | 31 +++++++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 34 insertions(+) diff --git a/src/buffer.c b/src/buffer.c index eb6b28772..0a68d484e 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -979,6 +979,7 @@ free_buffer_stuff( hash_init(&buf->b_vars->dv_hashtab); init_changedtick(buf); CHANGEDTICK(buf) = tick; + remove_listeners(buf); } #endif uc_clear(&buf->b_ucmds); // clear local user commands diff --git a/src/testdir/test_listener.vim b/src/testdir/test_listener.vim index a7815dc04..a263abadd 100644 --- a/src/testdir/test_listener.vim +++ b/src/testdir/test_listener.vim @@ -295,3 +295,34 @@ func Test_listener_undo_line_number() delfunc EchoChanges call listener_remove(lid) endfunc + +func Test_listener_cleared_newbuf() + func Listener(bufnr, start, end, added, changes) + let g:gotCalled += 1 + endfunc + new + " check that listening works + let g:gotCalled = 0 + let lid = listener_add("Listener") + call feedkeys("axxx\", 'xt') + call listener_flush(bufnr()) + call assert_equal(1, g:gotCalled) + %bwipe! + let bufnr = bufnr() + let b:testing = 123 + let lid = listener_add("Listener") + enew! + " check buffer is reused + call assert_equal(bufnr, bufnr()) + call assert_false(exists('b:testing')) + + " check that listening stops when reusing the buffer + let g:gotCalled = 0 + call feedkeys("axxx\", 'xt') + call listener_flush(bufnr()) + call assert_equal(0, g:gotCalled) + unlet g:gotCalled + + bwipe! + delfunc Listener +endfunc diff --git a/src/version.c b/src/version.c index cff754f28..6dd07bb68 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 82, /**/ 81, /**/ -- 2.50.1