summaryrefslogtreecommitdiffstats
path: root/src/change.c
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2022-09-02 17:12:07 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-02 17:12:07 +0100
commit956be4678fba2051a8d24c15cc5dc67fb89c515f (patch)
tree70e40e0f48e72309a78a81b4ddaad7f799565cb3 /src/change.c
parent35d21c6830fc2d68aca838424a0e786821c5891c (diff)
patch 9.0.0361: removing a listener may result in a memory leakv9.0.0361
Problem: Removing a listener may result in a memory leak and remove subsequent listerns. Solution: Init the "prev" pointer only once. (Yegappan Lakshmanan, closes #11039)
Diffstat (limited to 'src/change.c')
-rw-r--r--src/change.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/change.c b/src/change.c
index 71ad9eaf87..b84dfad358 100644
--- a/src/change.c
+++ b/src/change.c
@@ -362,6 +362,7 @@ invoke_listeners(buf_T *buf)
int save_updating_screen = updating_screen;
static int recursive = FALSE;
listener_T *next;
+ listener_T *prev;
if (buf->b_recorded_changes == NULL // nothing changed
|| buf->b_listener == NULL // no listeners
@@ -406,10 +407,9 @@ invoke_listeners(buf_T *buf)
}
// If f_listener_remove() was called may have to remove a listener now.
+ prev = NULL;
for (lnr = buf->b_listener; lnr != NULL; lnr = next)
{
- listener_T *prev = NULL;
-
next = lnr->lr_next;
if (lnr->lr_id == 0)
remove_listener(buf, lnr, prev);