aboutsummaryrefslogtreecommitdiff
path: root/gdb/inflow.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-11-16 18:44:42 +0000
committerPedro Alves <palves@redhat.com>2017-11-16 18:44:42 +0000
commite2c33ac745108550dcc2dc61d23378fb2fa9e911 (patch)
treeeb5d27c5f5944284891105c67564e669a9f057c0 /gdb/inflow.c
parentea04e54ca8b935b01155c3d40381d879dd6ba683 (diff)
downloadbinutils-e2c33ac745108550dcc2dc61d23378fb2fa9e911.zip
binutils-e2c33ac745108550dcc2dc61d23378fb2fa9e911.tar.gz
binutils-e2c33ac745108550dcc2dc61d23378fb2fa9e911.tar.bz2
gdb/inflow.c: Move SIGTTOU temporary ignoring to a RAII class
I expect to use this in more places (in inflow.c) in follow up patches, but I think this is still good on its own. gdb/ChangeLog: 2017-11-16 Pedro Alves <palves@redhat.com> * inflow.c (scoped_ignore_sigttou): New class. (child_terminal_ours_1, new_tty): Use it.
Diffstat (limited to 'gdb/inflow.c')
-rw-r--r--gdb/inflow.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/gdb/inflow.c b/gdb/inflow.c
index 0c279e6..7c49246 100644
--- a/gdb/inflow.c
+++ b/gdb/inflow.c
@@ -91,6 +91,35 @@ static serial_ttystate initial_gdb_ttystate;
static struct terminal_info *get_inflow_inferior_data (struct inferior *);
+/* RAII class used to ignore SIGTTOU in a scope. */
+
+class scoped_ignore_sigttou
+{
+public:
+ scoped_ignore_sigttou ()
+ {
+#ifdef SIGTTOU
+ if (job_control)
+ m_osigttou = signal (SIGTTOU, SIG_IGN);
+#endif
+ }
+
+ ~scoped_ignore_sigttou ()
+ {
+#ifdef SIGTTOU
+ if (job_control)
+ signal (SIGTTOU, m_osigttou);
+#endif
+ }
+
+ DISABLE_COPY_AND_ASSIGN (scoped_ignore_sigttou);
+
+private:
+#ifdef SIGTTOU
+ sighandler_t m_osigttou = NULL;
+#endif
+};
+
#ifdef HAVE_TERMIOS_H
/* Return the process group of the current inferior. */
@@ -329,17 +358,11 @@ child_terminal_ours_1 (int output_only)
return;
else
{
-#ifdef SIGTTOU
- /* Ignore this signal since it will happen when we try to set the
- pgrp. */
- sighandler_t osigttou = NULL;
-#endif
int result ATTRIBUTE_UNUSED;
-#ifdef SIGTTOU
- if (job_control)
- osigttou = signal (SIGTTOU, SIG_IGN);
-#endif
+ /* Ignore SIGTTOU since it will happen when we try to set the
+ terminal's pgrp. */
+ scoped_ignore_sigttou ignore_sigttou;
xfree (tinfo->ttystate);
tinfo->ttystate = serial_get_tty_state (stdin_serial);
@@ -372,11 +395,6 @@ child_terminal_ours_1 (int output_only)
#endif /* termios */
}
-#ifdef SIGTTOU
- if (job_control)
- signal (SIGTTOU, osigttou);
-#endif
-
if (!job_control)
{
signal (SIGINT, sigint_ours);
@@ -603,12 +621,10 @@ new_tty (void)
tty = open ("/dev/tty", O_RDWR);
if (tty > 0)
{
- sighandler_t osigttou;
+ scoped_ignore_sigttou ignore_sigttou;
- osigttou = signal (SIGTTOU, SIG_IGN);
ioctl (tty, TIOCNOTTY, 0);
close (tty);
- signal (SIGTTOU, osigttou);
}
#endif