From 852908e82d2f5e192113a11ead413214a135293e Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 6 Oct 2011 19:47:45 +0000 Subject: [PATCH] * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Send __SIGSETPGRP pseudo signal to process group instead of just calling init_console_handler. * sigproc.cc (wait_sig): Call init_console_handler here on __SIGSETPGRP signal. * sigproc.h (__SIGSETPGRP): Define. --- winsup/cygwin/ChangeLog | 9 +++++++++ winsup/cygwin/fhandler_termios.cc | 3 ++- winsup/cygwin/sigproc.cc | 3 +++ winsup/cygwin/sigproc.h | 3 ++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 4e91432d4..dfa8dc309 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2011-10-06 Corinna Vinschen + + * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Send __SIGSETPGRP + pseudo signal to process group instead of just calling + init_console_handler. + * sigproc.cc (wait_sig): Call init_console_handler here on __SIGSETPGRP + signal. + * sigproc.h (__SIGSETPGRP): Define. + 2011-10-06 Christian Franke * include/cygwin/wait.h: Use new __wait_status_to_int() diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index 708aabe4e..9ea6ae9d8 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -78,7 +78,8 @@ fhandler_termios::tcsetpgrp (const pid_t pgid) { case bg_ok: tc ()->setpgid (pgid); - init_console_handler (tc ()->is_console); + if (tc ()->is_console) + tc ()->kill_pgrp (__SIGSETPGRP); res = 0; break; case bg_signalled: diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 26f50f7be..cd27f2642 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -1225,6 +1225,9 @@ wait_sig (VOID *) my_sendsig = NULL; sigproc_printf ("saw __SIGEXIT"); break; /* handle below */ + case __SIGSETPGRP: + init_console_handler (true); + break; default: if (pack.si.si_signo < 0) sig_clear (-pack.si.si_signo); diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h index ee6e7d537..f1f6b6463 100644 --- a/winsup/cygwin/sigproc.h +++ b/winsup/cygwin/sigproc.h @@ -23,7 +23,8 @@ enum __SIGFLUSHFAST = -(NSIG + 6), __SIGHOLD = -(NSIG + 7), __SIGNOHOLD = -(NSIG + 8), - __SIGEXIT = -(NSIG + 9) + __SIGEXIT = -(NSIG + 9), + __SIGSETPGRP = -(NSIG + 10) }; #endif