0
0
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:
Bram Moolenaar
2016-07-11 22:41:15 +02:00
parent da3a77d9ec
commit 1436d8d51c
5 changed files with 61 additions and 73 deletions

View File

@@ -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