patch 7.4.2026
Problem: Reference counting for callbacks isn't right.
Solution: Add free_callback(). (Ken Takata) Fix reference count.
diff --git a/src/eval.c b/src/eval.c
index a950436..7798864 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -21178,13 +21178,33 @@
return (*pp)->pt_name;
}
*pp = NULL;
- if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING)
+ if (arg->v_type == VAR_FUNC)
+ {
+ func_ref(arg->vval.v_string);
+ return arg->vval.v_string;
+ }
+ if (arg->v_type == VAR_STRING)
return arg->vval.v_string;
if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0)
return (char_u *)"";
EMSG(_("E921: Invalid callback argument"));
return NULL;
}
+
+/*
+ * Unref/free "callback" and "partial" retured by get_callback().
+ */
+ void
+free_callback(char_u *callback, partial_T *partial)
+{
+ if (partial != NULL)
+ partial_unref(partial);
+ else if (callback != NULL)
+ {
+ func_unref(callback);
+ vim_free(callback);
+ }
+}
#endif
#ifdef FEAT_TIMERS