PR gdb/544
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 24 Mar 2008 12:59:51 +0000 (12:59 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 24 Mar 2008 12:59:51 +0000 (12:59 +0000)
* 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.

readline/ChangeLog.gdb
readline/display.c
readline/rltty.c
readline/rltty.h

index 0c3bcc4b37cb4cf01db11d718b104741568e947c..1a1dfc980762330f6cbd46aea3ff11d9fab52a7e 100644 (file)
@@ -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
index 08580987712a1d105d88808688279c85e2b60fea..575b0ad0ea8647175bd257d213aa2b2ae2a0fdbc 100644 (file)
@@ -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
index 9a0326ed2095994a048fa9d6204916b30b98fc90..0cd5028e491220fdd027437f1222f5b719e926f8 100644 (file)
@@ -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 */
 \f
index 142e96b6a64ee6dbce3f901562b6083ab0e37ca2..fc6662d9d824a911fb82fbcd61f632e78da6493f 100644 (file)
@@ -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_ */