1
0
forked from aniani/vim

patch 9.0.0282: a nested timout stops the previous timeout

Problem:    A nested timout stops the previous timeout.
Solution:   Ignore any nested timeout.
This commit is contained in:
Bram Moolenaar
2022-08-26 21:33:04 +01:00
parent 58dcbf1c65
commit 0f61838636
3 changed files with 22 additions and 4 deletions

View File

@@ -9176,6 +9176,7 @@ do_searchpair(
theend:
#ifdef FEAT_RELTIME
if (time_limit > 0)
disable_regexp_timeout();
#endif
vim_free(pat2);

View File

@@ -51,18 +51,33 @@ toggle_Magic(int x)
}
#ifdef FEAT_RELTIME
static int timeout_nesting = 0;
/*
* Start a timer that will cause the regexp to abort after "msec".
* This doesn't work well recursively. In case it happens anyway, the first
* set timeout will prevail, nested ones are ignored.
* The caller must make sure there is a matching disable_regexp_timeout() call!
*/
void
init_regexp_timeout(long msec)
{
if (timeout_nesting == 0)
timeout_flag = start_timeout(msec);
++timeout_nesting;
}
void
disable_regexp_timeout(void)
{
if (timeout_nesting == 0)
iemsg("disable_regexp_timeout() called without active timer");
else if (--timeout_nesting == 0)
{
stop_timeout();
timeout_flag = &dummy_timeout_flag;
}
}
#endif
/*

View File

@@ -707,6 +707,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
282,
/**/
281,
/**/