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.
This commit is contained in:
Pedro Alves 2017-11-16 18:44:42 +00:00
parent ea04e54ca8
commit e2c33ac745
2 changed files with 38 additions and 17 deletions

View File

@ -1,3 +1,8 @@
2017-11-16 Pedro Alves <palves@redhat.com>
* inflow.c (scoped_ignore_sigttou): New class.
(child_terminal_ours_1, new_tty): Use it.
2017-11-16 Ulrich Weigand <uweigand@de.ibm.com> 2017-11-16 Ulrich Weigand <uweigand@de.ibm.com>
* target-float.c (decimal_from_number): Add byte_order argument and * target-float.c (decimal_from_number): Add byte_order argument and

View File

@ -91,6 +91,35 @@ static serial_ttystate initial_gdb_ttystate;
static struct terminal_info *get_inflow_inferior_data (struct inferior *); 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 #ifdef HAVE_TERMIOS_H
/* Return the process group of the current inferior. */ /* Return the process group of the current inferior. */
@ -329,17 +358,11 @@ child_terminal_ours_1 (int output_only)
return; return;
else 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; int result ATTRIBUTE_UNUSED;
#ifdef SIGTTOU /* Ignore SIGTTOU since it will happen when we try to set the
if (job_control) terminal's pgrp. */
osigttou = signal (SIGTTOU, SIG_IGN); scoped_ignore_sigttou ignore_sigttou;
#endif
xfree (tinfo->ttystate); xfree (tinfo->ttystate);
tinfo->ttystate = serial_get_tty_state (stdin_serial); tinfo->ttystate = serial_get_tty_state (stdin_serial);
@ -372,11 +395,6 @@ child_terminal_ours_1 (int output_only)
#endif /* termios */ #endif /* termios */
} }
#ifdef SIGTTOU
if (job_control)
signal (SIGTTOU, osigttou);
#endif
if (!job_control) if (!job_control)
{ {
signal (SIGINT, sigint_ours); signal (SIGINT, sigint_ours);
@ -603,12 +621,10 @@ new_tty (void)
tty = open ("/dev/tty", O_RDWR); tty = open ("/dev/tty", O_RDWR);
if (tty > 0) if (tty > 0)
{ {
sighandler_t osigttou; scoped_ignore_sigttou ignore_sigttou;
osigttou = signal (SIGTTOU, SIG_IGN);
ioctl (tty, TIOCNOTTY, 0); ioctl (tty, TIOCNOTTY, 0);
close (tty); close (tty);
signal (SIGTTOU, osigttou);
} }
#endif #endif