mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 8.1.0349: crash when wiping buffer in a callback
Problem: Crash when wiping buffer in a callback. Solution: Do not handle messages when only peeking for a character. (closes #2107) Add "redraw_flag" to test_override().
This commit is contained in:
@@ -8737,6 +8737,7 @@ test_override({name}, {val}) *test_override()*
|
|||||||
|
|
||||||
name effect when {val} is non-zero ~
|
name effect when {val} is non-zero ~
|
||||||
redraw disable the redrawing() function
|
redraw disable the redrawing() function
|
||||||
|
redraw_flag ignore the RedrawingDisabled flag
|
||||||
char_avail disable the char_avail() function
|
char_avail disable the char_avail() function
|
||||||
starting reset the "starting" variable, see below
|
starting reset the "starting" variable, see below
|
||||||
nfa_fail makes the NFA regexp engine fail to force a
|
nfa_fail makes the NFA regexp engine fail to force a
|
||||||
|
@@ -13073,6 +13073,8 @@ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
|
|||||||
|
|
||||||
if (STRCMP(name, (char_u *)"redraw") == 0)
|
if (STRCMP(name, (char_u *)"redraw") == 0)
|
||||||
disable_redraw_for_testing = val;
|
disable_redraw_for_testing = val;
|
||||||
|
else if (STRCMP(name, (char_u *)"redraw_flag") == 0)
|
||||||
|
ignore_redraw_flag_for_testing = val;
|
||||||
else if (STRCMP(name, (char_u *)"char_avail") == 0)
|
else if (STRCMP(name, (char_u *)"char_avail") == 0)
|
||||||
disable_char_avail_for_testing = val;
|
disable_char_avail_for_testing = val;
|
||||||
else if (STRCMP(name, (char_u *)"starting") == 0)
|
else if (STRCMP(name, (char_u *)"starting") == 0)
|
||||||
@@ -13095,6 +13097,7 @@ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
|
|||||||
{
|
{
|
||||||
disable_char_avail_for_testing = FALSE;
|
disable_char_avail_for_testing = FALSE;
|
||||||
disable_redraw_for_testing = FALSE;
|
disable_redraw_for_testing = FALSE;
|
||||||
|
ignore_redraw_flag_for_testing = FALSE;
|
||||||
nfa_fail_for_testing = FALSE;
|
nfa_fail_for_testing = FALSE;
|
||||||
if (save_starting >= 0)
|
if (save_starting >= 0)
|
||||||
{
|
{
|
||||||
|
@@ -1633,9 +1633,10 @@ EXTERN int alloc_fail_countdown INIT(= -1);
|
|||||||
EXTERN int alloc_fail_repeat INIT(= 0);
|
EXTERN int alloc_fail_repeat INIT(= 0);
|
||||||
|
|
||||||
/* flags set by test_override() */
|
/* flags set by test_override() */
|
||||||
EXTERN int disable_char_avail_for_testing INIT(= 0);
|
EXTERN int disable_char_avail_for_testing INIT(= FALSE);
|
||||||
EXTERN int disable_redraw_for_testing INIT(= 0);
|
EXTERN int disable_redraw_for_testing INIT(= FALSE);
|
||||||
EXTERN int nfa_fail_for_testing INIT(= 0);
|
EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE);
|
||||||
|
EXTERN int nfa_fail_for_testing INIT(= FALSE);
|
||||||
|
|
||||||
EXTERN int in_free_unref_items INIT(= FALSE);
|
EXTERN int in_free_unref_items INIT(= FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -417,10 +417,14 @@ mch_inchar(
|
|||||||
handle_resize();
|
handle_resize();
|
||||||
|
|
||||||
#ifdef MESSAGE_QUEUE
|
#ifdef MESSAGE_QUEUE
|
||||||
parse_queued_messages();
|
// Only process messages when waiting.
|
||||||
/* If input was put directly in typeahead buffer bail out here. */
|
if (wtime != 0)
|
||||||
if (typebuf_changed(tb_change_cnt))
|
{
|
||||||
return 0;
|
parse_queued_messages();
|
||||||
|
// If input was put directly in typeahead buffer bail out here.
|
||||||
|
if (typebuf_changed(tb_change_cnt))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (wtime < 0 && did_start_blocking)
|
if (wtime < 0 && did_start_blocking)
|
||||||
/* blocking and already waited for p_ut */
|
/* blocking and already waited for p_ut */
|
||||||
|
@@ -1529,15 +1529,19 @@ WaitForChar(long msec, int ignore_input)
|
|||||||
*/
|
*/
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
// Only process messages when waiting.
|
||||||
|
if (msec != 0)
|
||||||
|
{
|
||||||
#ifdef MESSAGE_QUEUE
|
#ifdef MESSAGE_QUEUE
|
||||||
parse_queued_messages();
|
parse_queued_messages();
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_MZSCHEME
|
#ifdef FEAT_MZSCHEME
|
||||||
mzvim_check_threads();
|
mzvim_check_threads();
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_CLIENTSERVER
|
#ifdef FEAT_CLIENTSERVER
|
||||||
serverProcessPendingMessages();
|
serverProcessPendingMessages();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (0
|
if (0
|
||||||
#ifdef FEAT_MOUSE
|
#ifdef FEAT_MOUSE
|
||||||
|
@@ -10819,8 +10819,11 @@ redrawing(void)
|
|||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
return (!RedrawingDisabled
|
return ((!RedrawingDisabled
|
||||||
&& !(p_lz && char_avail() && !KeyTyped && !do_redraw));
|
#ifdef FEAT_EVAL
|
||||||
|
|| ignore_redraw_flag_for_testing
|
||||||
|
#endif
|
||||||
|
) && !(p_lz && char_avail() && !KeyTyped && !do_redraw));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -794,6 +794,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 */
|
||||||
|
/**/
|
||||||
|
349,
|
||||||
/**/
|
/**/
|
||||||
348,
|
348,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user