diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index b567cfae5..713972952 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2004-09-20 Christopher Faylor + + * exceptions.cc (sig_handle_tty_stop): Set flag that we are in a cygwin + function to avoid a probably erroneous stack walk. + 2004-09-17 Corinna Vinschen * syscalls.cc (unlink): Don't use "delete on close" on remote shares. diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 1a065f720..7f76ad5bc 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -593,7 +593,7 @@ extern "C" { static void sig_handle_tty_stop (int sig) { - /* Silently ignore attempts to suspend if there is no accomodating + /* Silently ignore attempts to suspend if there is no accommodating cygwin parent to deal with this behavior. */ if (!myself->ppid_handle) { @@ -623,6 +623,7 @@ sig_handle_tty_stop (int sig) HANDLE w4[2]; w4[0] = sigCONT; w4[1] = signal_arrived; + _my_tls.incyg = 1; switch (WaitForMultipleObjects (2, w4, TRUE, INFINITE)) { case WAIT_OBJECT_0: @@ -633,6 +634,7 @@ sig_handle_tty_stop (int sig) api_fatal ("WaitSingleObject failed, %E"); break; } + _my_tls.incyg = 0; return; } } diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 2ab97698f..416761ee6 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -1182,6 +1182,8 @@ wait_sig (VOID *self) else { int sig = pack.si.si_signo; + // FIXME: Not quite right when taking threads into consideration. + // Do we need a per-thread queue? if (sigq.sigs[sig].si.si_signo) sigproc_printf ("sig %d already queued", pack.si.si_signo); else