patch 8.2.3609: internal error when ModeChanged is triggered recursively
Problem: Internal error when ModeChanged is triggered when v:event is
already in use.
Solution: Save and restore v:event if needed.
diff --git a/src/register.c b/src/register.c
index 129c80d..268c839 100644
--- a/src/register.c
+++ b/src/register.c
@@ -991,17 +991,18 @@
void
yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
{
- static int recursive = FALSE;
- dict_T *v_event;
- list_T *list;
- int n;
- char_u buf[NUMBUFLEN + 2];
- long reglen = 0;
+ static int recursive = FALSE;
+ dict_T *v_event;
+ list_T *list;
+ int n;
+ char_u buf[NUMBUFLEN + 2];
+ long reglen = 0;
+ save_v_event_T save_v_event;
if (recursive)
return;
- v_event = get_vim_var_dict(VV_EVENT);
+ v_event = get_v_event(&save_v_event);
list = list_alloc();
if (list == NULL)
@@ -1045,8 +1046,7 @@
recursive = FALSE;
// Empty the dictionary, v:event is still valid
- dict_free_contents(v_event);
- hash_init(&v_event->dv_hashtab);
+ restore_v_event(v_event, &save_v_event);
}
#endif