diff src/vim9execute.c @ 26445:568f93dcdc62 v8.2.3753

patch 8.2.3753: Vim9: function unreferenced while called is never deleted Commit: https://github.com/vim/vim/commit/2336c376d5796446d44622b0dfa8fd3fd1a5d22b Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 6 15:06:54 2021 +0000 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.
author Bram Moolenaar <Bram@vim.org>
date Mon, 06 Dec 2021 16:15:03 +0100
parents 42471d3ac079
children ff0310e6f889
line wrap: on
line diff
--- 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)
     {