1
0
forked from aniani/vim

patch 8.2.3788: lambda for option that is a function may be freed

Problem:    Lambda for option that is a function may be garbage collected.
Solution:   Set a reference in the funcref. (Yegappan Lakshmanan,
            closes #9330)
This commit is contained in:
Yegappan Lakshmanan
2021-12-12 16:26:44 +00:00
committed by Bram Moolenaar
parent 6e371ecb27
commit 6ae8fae869
19 changed files with 1090 additions and 897 deletions

View File

@@ -117,7 +117,7 @@ call_imstatusfunc(void)
void
free_xim_stuff(void)
{
#if defined(FEAT_EVAL) && \
# if defined(FEAT_EVAL) && \
(defined(FEAT_XIM) || defined(IME_WITHOUT_XIM) || defined(VIMDLL))
free_callback(&imaf_cb);
free_callback(&imsf_cb);
@@ -125,6 +125,24 @@ free_xim_stuff(void)
}
#endif
/*
* Mark the global 'imactivatefunc' and 'imstatusfunc' callbacks with 'copyID'
* so that they are not garbage collected.
*/
int
set_ref_in_im_funcs(int copyID UNUSED)
{
int abort = FALSE;
#if defined(FEAT_EVAL) && \
(defined(FEAT_XIM) || defined(IME_WITHOUT_XIM) || defined(VIMDLL))
abort = set_ref_in_callback(&imaf_cb, copyID);
abort = abort || set_ref_in_callback(&imsf_cb, copyID);
#endif
return abort;
}
#if defined(FEAT_XIM) || defined(PROTO)