From 9781d9c00517a67c44b50b040cca2c5804daf15c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 20 Sep 2022 13:51:25 +0100 Subject: patch 9.0.0513: may not be able to use a pattern ad the debug prompt Problem: May not be able to use a pattern ad the debug prompt. Solution: Temporarily disable the timeout. (closes #11164) --- src/debugger.c | 2 ++ src/proto/regexp.pro | 2 ++ src/regexp.c | 28 ++++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 34 insertions(+) diff --git a/src/debugger.c b/src/debugger.c index 4a325505ae..09c8355171 100644 --- a/src/debugger.c +++ b/src/debugger.c @@ -87,6 +87,7 @@ do_debug(char_u *cmd) msg_silent = FALSE; // display messages emsg_silent = FALSE; // display error messages redir_off = TRUE; // don't redirect debug commands + save_timeout_for_debugging(); // disable regexp timeout flag State = MODE_NORMAL; debug_mode = TRUE; @@ -293,6 +294,7 @@ do_debug(char_u *cmd) redraw_all_later(UPD_NOT_VALID); need_wait_return = FALSE; msg_scroll = save_msg_scroll; + restore_timeout_for_debugging(); lines_left = Rows - 1; State = save_State; debug_mode = FALSE; diff --git a/src/proto/regexp.pro b/src/proto/regexp.pro index 3fd91eefaa..ffd5a07783 100644 --- a/src/proto/regexp.pro +++ b/src/proto/regexp.pro @@ -1,6 +1,8 @@ /* regexp.c */ void init_regexp_timeout(long msec); void disable_regexp_timeout(void); +void save_timeout_for_debugging(void); +void restore_timeout_for_debugging(void); int re_multiline(regprog_T *prog); char_u *skip_regexp(char_u *startp, int delim, int magic); char_u *skip_regexp_err(char_u *startp, int delim, int magic); diff --git a/src/regexp.c b/src/regexp.c index 61fc14da32..842c48038d 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -80,6 +80,34 @@ disable_regexp_timeout(void) } #endif +#if defined(FEAT_EVAL) || defined(PROTO) +# ifdef FEAT_RELTIME +static sig_atomic_t *saved_timeout_flag; +# endif + +/* + * Used at the debug prompt: disable the timeout so that expression evaluation + * can used patterns. + * Must be followed by calling restore_timeout_for_debugging(). + */ + void +save_timeout_for_debugging(void) +{ +# ifdef FEAT_RELTIME + saved_timeout_flag = (sig_atomic_t *)timeout_flag; + timeout_flag = &dummy_timeout_flag; +# endif +} + + void +restore_timeout_for_debugging(void) +{ +# ifdef FEAT_RELTIME + timeout_flag = saved_timeout_flag; +# endif +} +#endif + /* * The first byte of the BT regexp internal "program" is actually this magic * number; the start node begins in the second byte. It's used to catch the diff --git a/src/version.c b/src/version.c index 55da620bc0..129f7ce9c4 100644 --- a/src/version.c +++ b/src/version.c @@ -699,6 +699,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 513, /**/ 512, /**/ -- cgit v1.2.3