|
@@ -682,6 +682,7 @@ static int
|
|
|
handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
|
|
sigset_t *oldset, struct pt_regs *regs)
|
|
|
{
|
|
|
+ sigset_t blocked;
|
|
|
int ret;
|
|
|
|
|
|
/* Are we from a system call? */
|
|
@@ -741,12 +742,10 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
|
|
*/
|
|
|
regs->flags &= ~X86_EFLAGS_TF;
|
|
|
|
|
|
- spin_lock_irq(¤t->sighand->siglock);
|
|
|
- sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask);
|
|
|
+ sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask);
|
|
|
if (!(ka->sa.sa_flags & SA_NODEFER))
|
|
|
- sigaddset(¤t->blocked, sig);
|
|
|
- recalc_sigpending();
|
|
|
- spin_unlock_irq(¤t->sighand->siglock);
|
|
|
+ sigaddset(&blocked, sig);
|
|
|
+ set_current_blocked(&blocked);
|
|
|
|
|
|
tracehook_signal_handler(sig, info, ka, regs,
|
|
|
test_thread_flag(TIF_SINGLESTEP));
|