Messages in this thread | | | Subject | Re: [PATCH] avr32: use set_current_blocked() in handle_signal/sys_rt_sigreturn | From | Matt Fleming <> | Date | Wed, 03 Aug 2011 14:56:37 +0100 |
| |
On Wed, 2011-08-03 at 15:39 +0200, Oleg Nesterov wrote: > On 08/03, Oleg Nesterov wrote: > > > > On 08/03, Matt Fleming wrote: > > > > > > * Block the signal if we were unsuccessful. > > > */ > > > if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) { > > > spin_lock_irq(¤t->sighand->siglock); > > > sigorsets(¤t->blocked, ¤t->blocked, > > > &ka->sa.sa_mask); > > > sigaddset(¤t->blocked, sig); > > > recalc_sigpending(); > > > spin_unlock_irq(¤t->sighand->siglock); > > > } > > > > Agreed, this looks "obviously wrong". We should block the !SA_NODEFER > > signal it was delivered. > > (I meant, it is was successfully delivered). > > While at it, I'd also suggest another patch on top of Matt's. > Uncompiled/untested. > > ------------------------------------------------------------------------------ > [PATCH] avr32: use set_current_blocked() in handle_signal/sys_rt_sigreturn
Actually this was the reason that I spotted this bug. I'm going through all the code that sets current->blocked manually and making it use set_current_blocked() ;-)
Moving most of the recalc_pending() callers into one place (set_current_blocked()) makes my signal scalability series a lot smaller.
| |