patch 7.4.2142
Problem: Leaking memory when redefining a function.
Solution: Don't increment the function reference count when it's found by
name. Don't remove the wrong function from the hashtab. More
reference counting fixes.
diff --git a/src/structs.h b/src/structs.h
index a8b85f4..5439748 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1327,7 +1327,7 @@
#endif
scid_T uf_script_ID; /* ID of script where function was defined,
used for s: variables */
- int uf_refcount; /* for numbered function: reference count */
+ int uf_refcount; /* reference count, see func_name_refcount() */
funccall_T *uf_scoped; /* l: local variables for closure */
char_u uf_name[1]; /* name of function (actually longer); can
start with <SNR>123_ (<SNR> is K_SPECIAL
@@ -1365,9 +1365,11 @@
funccall_T *caller; /* calling function or NULL */
/* for closure */
- int fc_refcount;
+ int fc_refcount; /* number of user functions that reference this
+ * funccal */
int fc_copyID; /* for garbage collection */
- garray_T fc_funcs; /* list of ufunc_T* which refer this */
+ garray_T fc_funcs; /* list of ufunc_T* which keep a reference to
+ * "func" */
};
/*