poll()/select() on a tty fd in a backgrounded process raises SIGTTIN
Corinna Vinschen
corinna-cygwin@cygwin.com
Wed Jul 27 08:03:00 GMT 2016
On Jul 26 22:51, Jon Turney wrote:
> On 25/07/2016 17:55, Corinna Vinschen wrote:
> > On Jul 25 17:52, Jon Turney wrote:
> > > > > This test case is reduced from a problem seen with gdb, since commit
> > > > > 0b333c5e, where gdb stops with SIGTTIN when the inferior is started.
> > > > [...]
> > > gdb stops because a poll() on stdin (even when stdin is not ready to read)
> > > while backgrounded causes a SIGTTIN to be raised.
> > >
> > > I think this caused by select.cc:peek_console/peek_pipe calling
> > > fhandler_termios::bg_check(SIGTTIN).
> > >
> > > My idea for fixing it is to remove that behaviour from cygwin, assuming I'm
> > > right in thinking that the behaviour is incorrect, although I'm wary of
> > > touching something that's so old, and I don't understand why that call to
> > > bg_check is in there at all...
>
> So, this is presumably so that the exception conditions which bg_check()
> knows about make the fd ready, irrespective of if peeking it shows some
> input.
> [...]
> Attached is the patch as discussed on IRC, with some additional commentary.
>
> After writing these comments, it's perhaps a bit clearer to me that
> bg_check() could be re-written to take a bg_check_operation enum (read,
> write, change_settings, peek), rather than trying to encode that operation
> as a signal number, but that might be changing things too much.
Jon, please don't hesitate to create a followup patch to clear things up.
> Also, looking at the uses of bg_check(), it's odd that
> handler_console::ioctl for TIOCSWINSZ calls bg_check (SIGTTOU), which should
> probably be -SIGTTOU, otherwise a background process could resize a console
> window without causing SIGTTOU. But then that operation doesn't seem to be
> implemented for console, but is for ttys, but it doesn't use bg_check...
Same here, if you have an improvement of this code, feel free.
I wonder why we don't support a fully functional TIOCSWINSZ on consoles
anyway. It shouldn't be that hard, should it? Basically a call to
SetConsoleWindowInfo...
Thanks for improving the comments. Please apply.
Thanks,
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-developers/attachments/20160727/a8d65a55/attachment.sig>
More information about the Cygwin-developers
mailing list