diff options
| author | Linus Torvalds <torvalds@home.osdl.org> | 2003-11-08 23:50:27 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-11-08 23:50:27 -0800 |
| commit | 685423fdfa01f11ccf645c7ea8df27fd518a2695 (patch) | |
| tree | a0e4e8283cee561ff48223b06d761cf8027ea11b | |
| parent | 90d0999ca258e2403d17ac621a661c50888512ed (diff) | |
| parent | e611653355cfcd94bad4bb10279bf3e75d0d19e2 (diff) | |
Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk
into home.osdl.org:/home/torvalds/v2.5/linux
| -rw-r--r-- | arch/arm/kernel/signal.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 9901b5d010a0..139603ee611f 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c @@ -497,18 +497,21 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset, */ ret |= !valid_user_regs(regs); + /* + * Block the signal if we were unsuccessful. + */ + if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) { + spin_lock_irq(&tsk->sighand->siglock); + sigorsets(&tsk->blocked, &tsk->blocked, + &ka->sa.sa_mask); + sigaddset(&tsk->blocked, sig); + recalc_sigpending(); + spin_unlock_irq(&tsk->sighand->siglock); + } + if (ret == 0) { if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; - - if (!(ka->sa.sa_flags & SA_NODEFER)) { - spin_lock_irq(&tsk->sighand->siglock); - sigorsets(&tsk->blocked, &tsk->blocked, - &ka->sa.sa_mask); - sigaddset(&tsk->blocked, sig); - recalc_sigpending(); - spin_unlock_irq(&tsk->sighand->siglock); - } return; } |
