patch 8.2.3418: garbage collection while evaluating may cause trouble
Problem: Garbage collection while evaluating may cause trouble.
Solution: Disable garbage collection while evaluating an expression.
(Christian Brabandt, issue #8848)
diff --git a/src/eval.c b/src/eval.c
index 6b3d78a..aceba5e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -561,16 +561,19 @@
char_u *retval;
funccal_entry_T funccal_entry;
int save_sc_version = current_sctx.sc_version;
+ int save_garbage = may_garbage_collect;
current_sctx.sc_version = 1;
save_funccal(&funccal_entry);
if (use_sandbox)
++sandbox;
++textwinlock;
+ may_garbage_collect = FALSE;
retval = eval_to_string(arg, FALSE);
if (use_sandbox)
--sandbox;
--textwinlock;
+ may_garbage_collect = save_garbage;
restore_funccal();
current_sctx.sc_version = save_sc_version;
return retval;