From 2336c376d5796446d44622b0dfa8fd3fd1a5d22b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 6 Dec 2021 15:06:54 +0000 Subject: patch 8.2.3753: Vim9: function unreferenced while called is never deleted Problem: Vim9: function unreferenced while called is never deleted. Solution: Delete a function when no longer referenced. --- src/vim9execute.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/vim9execute.c') 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) { -- cgit v1.2.1