diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-12-06 15:06:54 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-06 15:06:54 +0000 |
commit | 2336c376d5796446d44622b0dfa8fd3fd1a5d22b (patch) | |
tree | 65c5bf2e5140e7fb9f64065c5da69447b580c7c4 /src/vim9execute.c | |
parent | 8603be338ac810446f23c092f21bc6082f787519 (diff) | |
download | vim-git-8.2.3753.tar.gz |
patch 8.2.3753: Vim9: function unreferenced while called is never deletedv8.2.3753
Problem: Vim9: function unreferenced while called is never deleted.
Solution: Delete a function when no longer referenced.
Diffstat (limited to 'src/vim9execute.c')
-rw-r--r-- | src/vim9execute.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/vim9execute.c b/src/vim9execute.c index adfb9207c..f805dc0f1 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -4988,8 +4988,9 @@ call_def_function( estack_pop(); current_sctx = save_current_sctx; - // TODO: when is it safe to delete the function if it is no longer used? - --ufunc->uf_calls; + if (--ufunc->uf_calls <= 0 && ufunc->uf_refcount <= 0) + // Function was unreferenced while being used, free it now. + func_clear_free(ufunc, FALSE); if (*msg_list != NULL && saved_msg_list != NULL) { |