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