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:
parent
ea04e54ca8
commit
e2c33ac745
|
@ -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
|
||||||
|
|
50
gdb/inflow.c
50
gdb/inflow.c
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue