patch 8.2.0452: channel_parse_messages() fails when called recursively
Problem: channel_parse_messages() fails when called recursively.
Solution: Return for a recursive call. (closes #5835)
diff --git a/src/channel.c b/src/channel.c
index a57ed9c..15ee0b7 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -4428,14 +4428,22 @@
int ret = FALSE;
int r;
ch_part_T part = PART_SOCK;
+ static int recursive = FALSE;
#ifdef ELAPSED_FUNC
elapsed_T start_tv;
-
- ELAPSED_INIT(start_tv);
#endif
+ // The code below may invoke callbacks, which might call us back.
+ // That doesn't work well, just return without doing anything.
+ if (recursive)
+ return FALSE;
+ recursive = TRUE;
++safe_to_invoke_callback;
+#ifdef ELAPSED_FUNC
+ ELAPSED_INIT(start_tv);
+#endif
+
// Only do this message when another message was given, otherwise we get
// lots of them.
if ((did_repeated_msg & REPEATED_MSG_LOOKING) == 0)
@@ -4513,6 +4521,7 @@
}
--safe_to_invoke_callback;
+ recursive = FALSE;
return ret;
}
diff --git a/src/version.c b/src/version.c
index 12e287d..94fcb60 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 452,
+/**/
451,
/**/
450,