Fix iterating over pending signals if a signal doesn't have to be cleared

* sigproc.cc (pending_signals::clear): Yet another fix to fix the fix.
	Actually iterate over the list of pending signals even if there's a
	signal which doesn't have to be cleared.  Other than that, revert loop
	to it's former self as a while loop.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2015-11-05 10:09:08 +01:00
parent 57d93bebb2
commit eeef727026
2 changed files with 15 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2015-11-05 Corinna Vinschen <corinna@vinschen.de>
* sigproc.cc (pending_signals::clear): Yet another fix to fix the fix.
Actually iterate over the list of pending signals even if there's a
signal which doesn't have to be cleared. Other than that, revert loop
to it's former self as a while loop.
2015-11-04 Corinna Vinschen <corinna@vinschen.de>
* globals.cc (ro_u_prlfs): Add trailing NUL. Explain why.

View File

@ -402,11 +402,16 @@ sig_clear (int sig)
void
pending_signals::clear (_cygtls *tls)
{
sigpacket *q, *qnext;
sigpacket *q = &start, *qnext;
for (q = &start; (qnext = q->next); q->next = qnext->next)
while ((qnext = q->next))
if (qnext->sigtls == tls)
qnext->si.si_signo = 0;
{
qnext->si.si_signo = 0;
q->next = qnext->next;
}
else
q = qnext;
}
/* Clear pending signals of specific thread. Called from _cygtls::remove */