Mercurial > vim
diff src/userfunc.c @ 17151:ebe9aab81898 v8.1.1575
patch 8.1.1575: callbacks may be garbage collected
commit https://github.com/vim/vim/commit/75a1a9415b9c207de5a29b25c0d1949c6c9c5c61
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jun 20 03:45:36 2019 +0200
patch 8.1.1575: callbacks may be garbage collected
Problem: Callbacks may be garbage collected.
Solution: Set reference in callbacks. (Ozaki Kiichi, closes https://github.com/vim/vim/issues/4564)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 20 Jun 2019 04:00:07 +0200 |
parents | d244a9be99db |
children | 1d30eb64a7a2 |
line wrap: on
line diff
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -4032,12 +4032,12 @@ set_ref_in_call_stack(int copyID) funccall_T *fc; funccal_entry_T *entry; - for (fc = current_funccal; fc != NULL; fc = fc->caller) + for (fc = current_funccal; !abort && fc != NULL; fc = fc->caller) abort = abort || set_ref_in_funccal(fc, copyID); // Also go through the funccal_stack. - for (entry = funccal_stack; entry != NULL; entry = entry->next) - for (fc = entry->top_funccal; fc != NULL; fc = fc->caller) + for (entry = funccal_stack; !abort && entry != NULL; entry = entry->next) + for (fc = entry->top_funccal; !abort && fc != NULL; fc = fc->caller) abort = abort || set_ref_in_funccal(fc, copyID); return abort;