diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2007-10-17 02:27:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 11:42:54 -0400 |
commit | 13fbcb731220341537131b32cf01b1e70df7206d (patch) | |
tree | be6bd965e921b0918eb7b55626a0196915302f07 | |
parent | 6db840fa7887980ef68a649640d506fe069eef0c (diff) |
do_sigaction: don't worry about signal_pending()
do_sigaction() returns -ERESTARTNOINTR if signal_pending(). The comment says:
* If there might be a fatal signal pending on multiple
* threads, make sure we take it before changing the action.
I think this is not needed. We should only worry about SIGNAL_GROUP_EXIT case,
bit it implies a pending SIGKILL which can't be cleared by do_sigaction.
Kill this special case.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Acked-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | kernel/signal.c | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 90e2efad33ae..2124ffadcfde 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -2294,15 +2294,6 @@ int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) | |||
2294 | k = ¤t->sighand->action[sig-1]; | 2294 | k = ¤t->sighand->action[sig-1]; |
2295 | 2295 | ||
2296 | spin_lock_irq(¤t->sighand->siglock); | 2296 | spin_lock_irq(¤t->sighand->siglock); |
2297 | if (signal_pending(current)) { | ||
2298 | /* | ||
2299 | * If there might be a fatal signal pending on multiple | ||
2300 | * threads, make sure we take it before changing the action. | ||
2301 | */ | ||
2302 | spin_unlock_irq(¤t->sighand->siglock); | ||
2303 | return -ERESTARTNOINTR; | ||
2304 | } | ||
2305 | |||
2306 | if (oact) | 2297 | if (oact) |
2307 | *oact = *k; | 2298 | *oact = *k; |
2308 | 2299 | ||