mirror of
https://github.com/vim/vim.git
synced 2025-11-13 22:54:27 -05:00
patch 7.4.2026
Problem: Reference counting for callbacks isn't right. Solution: Add free_callback(). (Ken Takata) Fix reference count.
This commit is contained in:
22
src/eval.c
22
src/eval.c
@@ -21178,13 +21178,33 @@ get_callback(typval_T *arg, partial_T **pp)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user