* DevNotes: Add entry cgf-000022.

* cygtls.h (_cygtls::func): Define as a sa_sigaction style function.
* exceptions.cc (sig_handle_tty_stop): Ditto.
(_cygtls::interrupt_setup): Fix coercion to accommodate 'func' change.
(ctrl_c_handler): Use tty kill_pgrp to send a signal.
(sigpacket::process): Don't process sigflush here.
(_cygtls::call_signal_handler): Reorganize to avoid a race.  Always call
sa_sigaction style function.
* fhandler_termios.cc (is_flush_sig): Define new function.
(tty_min::kill_pgrp): Handle tty flush when signal detected.
(fhandler_termios::bg_check): Be slightly more paranoid about checking for
valid tty.
(fhandler_termios::sigflush): Don't flush unless tty owner.
* fhandler_tty.cc (fhandler_pty_slave::ioctl): Use tty kill_pgrp to send
signal.
(fhandler_pty_master::ioctl): Ditto.
* signal.cc (killsys): Delete definition.
* sigproc.h (killsys): Delete declaration.
* include/cygwin/signal.h (siginfo_t): Simplify union/struct nesting slightly.
Implement mechanism to allow cygwin data passing.
This commit is contained in:
Christopher Faylor
2013-01-31 05:26:47 +00:00
parent 3371f4c714
commit 118e51be1d
9 changed files with 100 additions and 68 deletions

View File

@@ -1,3 +1,18 @@
2013-01-31 cgf-000022
While researching the lftp behavior reported here:
http://cygwin.com/ml/cygwin/2013-01/msg00390.html
after a frenzy of rewriting sigflush handling to avoid blocking in the
signal thread (which is now and should ever have been illegal), it
dawned on me that we're not supposed to be flushing the tty input buffer
every time a signal is received. We're supposed to do this only when
the user hits a character (e.g., CTRL-C) which initiates a signal
action. So, I removed sigflush from sigpacket::process and moved it to
tc ()->kill_pgrp (). This function should only be called to send
signals related to the tty so this should have the desired effect.
2013-01-11 cgf-000021
Apparently I got the signal handling semantics of select() wrong again