forked from aniani/vim
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)
This commit is contained in:
@@ -4428,14 +4428,22 @@ channel_parse_messages(void)
|
|||||||
int ret = FALSE;
|
int ret = FALSE;
|
||||||
int r;
|
int r;
|
||||||
ch_part_T part = PART_SOCK;
|
ch_part_T part = PART_SOCK;
|
||||||
|
static int recursive = FALSE;
|
||||||
#ifdef ELAPSED_FUNC
|
#ifdef ELAPSED_FUNC
|
||||||
elapsed_T start_tv;
|
elapsed_T start_tv;
|
||||||
|
|
||||||
ELAPSED_INIT(start_tv);
|
|
||||||
#endif
|
#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;
|
++safe_to_invoke_callback;
|
||||||
|
|
||||||
|
#ifdef ELAPSED_FUNC
|
||||||
|
ELAPSED_INIT(start_tv);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Only do this message when another message was given, otherwise we get
|
// Only do this message when another message was given, otherwise we get
|
||||||
// lots of them.
|
// lots of them.
|
||||||
if ((did_repeated_msg & REPEATED_MSG_LOOKING) == 0)
|
if ((did_repeated_msg & REPEATED_MSG_LOOKING) == 0)
|
||||||
@@ -4513,6 +4521,7 @@ channel_parse_messages(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
--safe_to_invoke_callback;
|
--safe_to_invoke_callback;
|
||||||
|
recursive = FALSE;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -738,6 +738,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
452,
|
||||||
/**/
|
/**/
|
||||||
451,
|
451,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user