diff options
Diffstat (limited to 'arch/um/kernel/signal.c')
| -rw-r--r-- | arch/um/kernel/signal.c | 26 | 
1 files changed, 7 insertions, 19 deletions
| diff --git a/arch/um/kernel/signal.c b/arch/um/kernel/signal.c index e8b889d3bce7..fb12f4c5e649 100644 --- a/arch/um/kernel/signal.c +++ b/arch/um/kernel/signal.c @@ -65,21 +65,10 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,  #endif  		err = setup_signal_stack_si(sp, signr, ka, regs, info, oldset); -	if (err) { -		spin_lock_irq(¤t->sighand->siglock); -		current->blocked = *oldset; -		recalc_sigpending(); -		spin_unlock_irq(¤t->sighand->siglock); +	if (err)  		force_sigsegv(signr, current); -	} else { -		spin_lock_irq(¤t->sighand->siglock); -		sigorsets(¤t->blocked, ¤t->blocked, -			  &ka->sa.sa_mask); -		if (!(ka->sa.sa_flags & SA_NODEFER)) -			sigaddset(¤t->blocked, signr); -		recalc_sigpending(); -		spin_unlock_irq(¤t->sighand->siglock); -	} +	else +		block_sigmask(ka, signr);  	return err;  } @@ -162,12 +151,11 @@ int do_signal(void)   */  long sys_sigsuspend(int history0, int history1, old_sigset_t mask)  { +	sigset_t blocked; +  	mask &= _BLOCKABLE; -	spin_lock_irq(¤t->sighand->siglock); -	current->saved_sigmask = current->blocked; -	siginitset(¤t->blocked, mask); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	siginitset(&blocked, mask); +	set_current_blocked(&blocked);  	current->state = TASK_INTERRUPTIBLE;  	schedule(); | 
