diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2022-09-02 17:12:07 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-02 17:12:07 +0100 |
commit | 956be4678fba2051a8d24c15cc5dc67fb89c515f (patch) | |
tree | 70e40e0f48e72309a78a81b4ddaad7f799565cb3 /src/change.c | |
parent | 35d21c6830fc2d68aca838424a0e786821c5891c (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.c | 4 |
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); |