Mercurial > vim
changeset 5378:8336fd924e05 v7.4.040
updated for version 7.4.040
Problem: Valgrind error on exit when a script-local variable holds a
reference to the scope of another script.
Solution: First clear all variables, then free the scopes. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 25 Sep 2013 21:00:28 +0200 |
parents | f894129bfe5b |
children | b15c72e16ae8 |
files | src/eval.c src/version.c |
diffstat | 2 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -915,12 +915,13 @@ eval_clear() /* autoloaded script names */ ga_clear_strings(&ga_loaded); - /* script-local variables */ + /* Script-local variables. First clear all the variables and in a second + * loop free the scriptvar_T, because a variable in one script might hold + * a reference to the whole scope of another script. */ for (i = 1; i <= ga_scripts.ga_len; ++i) - { vars_clear(&SCRIPT_VARS(i)); + for (i = 1; i <= ga_scripts.ga_len; ++i) vim_free(SCRIPT_SV(i)); - } ga_clear(&ga_scripts); /* unreferenced lists and dicts */