diff options
-rw-r--r-- | readline/ChangeLog.gdb | 9 | ||||
-rw-r--r-- | readline/display.c | 6 | ||||
-rw-r--r-- | readline/rltty.c | 28 | ||||
-rw-r--r-- | readline/rltty.h | 3 |
4 files changed, 32 insertions, 14 deletions
diff --git a/readline/ChangeLog.gdb b/readline/ChangeLog.gdb index 0c3bcc4b37c..1a1dfc98076 100644 --- a/readline/ChangeLog.gdb +++ b/readline/ChangeLog.gdb @@ -1,3 +1,12 @@ +2008-03-24 Jan Kratochvil <jan.kratochvil@redhat.com> + + PR gdb/544 + * rltty.c (block_sigint, release_sigint): Rename to... + (_rl_block_sigint, _rl_release_sigint): ...these and make them global. + * rltty.h (_rl_block_sigint, _rl_release_sigint): New prototypes. + * display.c (rl_redisplay): Wrap the function by the calls to + _RL_BLOCK_SIGINT and _RL_RELEASE_SIGINT. + 2007-09-01 Daniel Jacobowitz <dan@codesourcery.com> PR gdb/2138 diff --git a/readline/display.c b/readline/display.c index 08580987712..575b0ad0ea8 100644 --- a/readline/display.c +++ b/readline/display.c @@ -463,6 +463,10 @@ rl_redisplay () if (!readline_echoing_p) return; + /* Signals are blocked through this function as the global data structures + could get corrupted upon modifications from an invoked signal handler. */ + _rl_block_sigint (); + if (!rl_display_prompt) rl_display_prompt = ""; @@ -1139,6 +1143,8 @@ rl_redisplay () else visible_wrap_offset = wrap_offset; } + + _rl_release_sigint (); } /* PWP: update_line() is based on finding the middle difference of each diff --git a/readline/rltty.c b/readline/rltty.c index 9a0326ed209..0cd5028e491 100644 --- a/readline/rltty.c +++ b/readline/rltty.c @@ -52,8 +52,8 @@ extern int errno; rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; -static void block_sigint PARAMS((void)); -static void release_sigint PARAMS((void)); +void _rl_block_sigint PARAMS((void)); +void _rl_release_sigint PARAMS((void)); static void set_winsize PARAMS((int)); @@ -74,9 +74,9 @@ static int sigint_oldmask; static int sigint_blocked; /* Cause SIGINT to not be delivered until the corresponding call to - release_sigint(). */ -static void -block_sigint () + _rl_release_sigint(). */ +void +_rl_block_sigint () { if (sigint_blocked) return; @@ -100,8 +100,8 @@ block_sigint () } /* Allow SIGINT to be delivered. */ -static void -release_sigint () +void +_rl_release_sigint () { if (sigint_blocked == 0) return; @@ -663,7 +663,7 @@ rl_prep_terminal (meta_flag) return; /* Try to keep this function from being INTerrupted. */ - block_sigint (); + _rl_block_sigint (); tty = fileno (rl_instream); @@ -676,7 +676,7 @@ rl_prep_terminal (meta_flag) if (errno == ENOTTY) #endif readline_echoing_p = 1; /* XXX */ - release_sigint (); + _rl_release_sigint (); return; } @@ -711,7 +711,7 @@ rl_prep_terminal (meta_flag) if (set_tty_settings (tty, &tio) < 0) { - release_sigint (); + _rl_release_sigint (); return; } @@ -722,7 +722,7 @@ rl_prep_terminal (meta_flag) terminal_prepped = 1; RL_SETSTATE(RL_STATE_TERMPREPPED); - release_sigint (); + _rl_release_sigint (); } /* Restore the terminal's normal settings and modes. */ @@ -735,7 +735,7 @@ rl_deprep_terminal () return; /* Try to keep this function from being interrupted. */ - block_sigint (); + _rl_block_sigint (); tty = fileno (rl_instream); @@ -746,14 +746,14 @@ rl_deprep_terminal () if (set_tty_settings (tty, &otio) < 0) { - release_sigint (); + _rl_release_sigint (); return; } terminal_prepped = 0; RL_UNSETSTATE(RL_STATE_TERMPREPPED); - release_sigint (); + _rl_release_sigint (); } #endif /* !NO_TTY_DRIVER */ diff --git a/readline/rltty.h b/readline/rltty.h index 142e96b6a64..fc6662d9d82 100644 --- a/readline/rltty.h +++ b/readline/rltty.h @@ -79,4 +79,7 @@ typedef struct _rl_tty_chars { unsigned char t_status; } _RL_TTY_CHARS; +extern void _rl_block_sigint PARAMS((void)); +extern void _rl_release_sigint PARAMS((void)); + #endif /* _RLTTY_H_ */ |