* exceptions.cc (sigpacket::process): Make sure that 'tls' is never NULL when

used.
This commit is contained in:
Christopher Faylor 2008-11-28 02:56:09 +00:00
parent 27171a8cfa
commit 65ebf94e53
2 changed files with 12 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2008-11-27 Christopher Faylor <me+cygwin@cgf.cx>
* exceptions.cc (sigpacket::process): Make sure that 'tls' is never
NULL when used.
2008-11-26 Christopher Faylor <me+cygwin@cgf.cx>
Remove unneeded whitespace throughout.
@ -207,7 +212,7 @@
2008-10-06 Christopher Faylor <me+cygwin@cgf.cx>
* cygtls.h (_cygtls::initialized): Remove bogus stack check which would
when checking the current thread from the current thread.
crash when checking the current thread from the current thread.
* tlsoffsets.h: Regenerate.
2008-10-05 Christopher Faylor <me+cygwin@cgf.cx>

View File

@ -1191,20 +1191,22 @@ sigpacket::process ()
else
handler = NULL;
bool tls_was_null = !tls;
if (tls_was_null)
tls = _main_tls;
if (si.si_signo == SIGKILL)
goto exit_sig;
if (si.si_signo == SIGSTOP)
{
sig_clear (SIGCONT);
if (!tls)
tls = _main_tls;
goto stop;
}
bool insigwait_mask;
if ((masked = ISSTATE (myself, PID_STOPPED)))
insigwait_mask = false;
else if (!tls)
else if (tls_was_null)
insigwait_mask = !handler && (tls = _cygtls::find_tls (si.si_signo));
else
insigwait_mask = sigismember (&tls->sigwait_mask, si.si_signo);
@ -1216,12 +1218,9 @@ sigpacket::process ()
/* nothing to do */;
else if (sigismember (mask, si.si_signo))
masked = true;
else if (tls)
else
masked = sigismember (&tls->sigmask, si.si_signo);
if (!tls)
tls = _main_tls;
if (masked)
{
sigproc_printf ("signal %d blocked", si.si_signo);