diff options
Diffstat (limited to 'kernel/signal.c')
| -rw-r--r-- | kernel/signal.c | 17 | 
1 files changed, 5 insertions, 12 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index d7f70aed1cc0..291c9700be75 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3102,15 +3102,11 @@ SYSCALL_DEFINE0(sgetmask)  SYSCALL_DEFINE1(ssetmask, int, newmask)  { -	int old; - -	spin_lock_irq(¤t->sighand->siglock); -	old = current->blocked.sig[0]; +	int old = current->blocked.sig[0]; +	sigset_t newset; -	siginitset(¤t->blocked, newmask & ~(sigmask(SIGKILL)| -						  sigmask(SIGSTOP))); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	siginitset(&newset, newmask & ~(sigmask(SIGKILL) | sigmask(SIGSTOP))); +	set_current_blocked(&newset);  	return old;  } @@ -3167,11 +3163,8 @@ SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)  		return -EFAULT;  	sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP)); -	spin_lock_irq(¤t->sighand->siglock);  	current->saved_sigmask = current->blocked; -	current->blocked = newset; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&newset);  	current->state = TASK_INTERRUPTIBLE;  	schedule();  |