vim-patch:8.1.0229: crash when dumping profiling data #10428

Problem:    Crash when dumping profiling data.
Solution:   Reset flag indicating that initialization was done.
79c2ad50b8
This commit is contained in:
Daniel Hahler 2019-07-05 22:00:28 +02:00 committed by Justin M. Keyes
parent 7535f843cd
commit 3c860e25e9
1 changed files with 19 additions and 12 deletions

View File

@ -21256,9 +21256,10 @@ void ex_function(exarg_T *eap)
overwrite = true;
} else {
// redefine existing function
ga_clear_strings(&(fp->uf_args));
ga_clear_strings(&(fp->uf_lines));
XFREE_CLEAR(name);
func_clear_items(fp);
fp->uf_profiling = false;
fp->uf_prof_initialized = false;
}
}
} else {
@ -21353,12 +21354,9 @@ void ex_function(exarg_T *eap)
} else {
fp->uf_scoped = NULL;
}
fp->uf_tml_count = NULL;
fp->uf_tml_total = NULL;
fp->uf_tml_self = NULL;
fp->uf_profiling = FALSE;
if (prof_def_func())
if (prof_def_func()) {
func_do_profile(fp);
}
fp->uf_varargs = varargs;
if (sandbox) {
flags |= FC_SANDBOX;
@ -22210,6 +22208,19 @@ static bool func_remove(ufunc_T *fp)
return false;
}
static void func_clear_items(ufunc_T *fp)
{
ga_clear_strings(&(fp->uf_args));
ga_clear_strings(&(fp->uf_lines));
xfree(fp->uf_tml_count);
fp->uf_tml_count = NULL;
xfree(fp->uf_tml_total);
fp->uf_tml_total = NULL;
xfree(fp->uf_tml_self);
fp->uf_tml_self = NULL;
}
/// Free all things that a function contains. Does not free the function
/// itself, use func_free() for that.
///
@ -22222,11 +22233,7 @@ static void func_clear(ufunc_T *fp, bool force)
fp->uf_cleared = true;
// clear this function
ga_clear_strings(&(fp->uf_args));
ga_clear_strings(&(fp->uf_lines));
xfree(fp->uf_tml_count);
xfree(fp->uf_tml_total);
xfree(fp->uf_tml_self);
func_clear_items(fp);
funccal_unref(fp->uf_scoped, fp, force);
}