diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-21 23:42:15 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-06-01 12:58:49 -0400 |
commit | a610d6e672d6d3723e8da257ad4a8a288a8f2f89 (patch) | |
tree | 2fac6ce7f72756771f4f87583205cc402589dcad /arch/arm/kernel | |
parent | 5754f412a3f107cbcd93ee125bef296f2a07539b (diff) |
pull clearing RESTORE_SIGMASK into block_sigmask()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/signal.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 2e66c93973c3..7f9abd75fc2e 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c | |||
@@ -528,7 +528,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, | |||
528 | /* | 528 | /* |
529 | * OK, we're invoking a handler | 529 | * OK, we're invoking a handler |
530 | */ | 530 | */ |
531 | static int | 531 | static void |
532 | handle_signal(unsigned long sig, struct k_sigaction *ka, | 532 | handle_signal(unsigned long sig, struct k_sigaction *ka, |
533 | siginfo_t *info, struct pt_regs *regs) | 533 | siginfo_t *info, struct pt_regs *regs) |
534 | { | 534 | { |
@@ -559,17 +559,14 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
559 | 559 | ||
560 | if (ret != 0) { | 560 | if (ret != 0) { |
561 | force_sigsegv(sig, tsk); | 561 | force_sigsegv(sig, tsk); |
562 | return ret; | 562 | return; |
563 | } | 563 | } |
564 | 564 | ||
565 | /* | 565 | /* |
566 | * Block the signal if we were successful. | 566 | * Block the signal if we were successful. |
567 | */ | 567 | */ |
568 | block_sigmask(ka, sig); | 568 | block_sigmask(ka, sig); |
569 | |||
570 | tracehook_signal_handler(sig, info, ka, regs, 0); | 569 | tracehook_signal_handler(sig, info, ka, regs, 0); |
571 | |||
572 | return 0; | ||
573 | } | 570 | } |
574 | 571 | ||
575 | /* | 572 | /* |
@@ -633,16 +630,7 @@ static void do_signal(struct pt_regs *regs, int syscall) | |||
633 | clear_thread_flag(TIF_SYSCALL_RESTARTSYS); | 630 | clear_thread_flag(TIF_SYSCALL_RESTARTSYS); |
634 | } | 631 | } |
635 | 632 | ||
636 | if (handle_signal(signr, &ka, &info, regs) == 0) { | 633 | handle_signal(signr, &ka, &info, regs); |
637 | /* | ||
638 | * A signal was successfully delivered; the saved | ||
639 | * sigmask will have been stored in the signal frame, | ||
640 | * and will be restored by sigreturn, so we can simply | ||
641 | * clear the TIF_RESTORE_SIGMASK flag. | ||
642 | */ | ||
643 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | ||
644 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
645 | } | ||
646 | return; | 634 | return; |
647 | } | 635 | } |
648 | 636 | ||