diff options
author | Matthew Wilcox <matthew@wil.cx> | 2007-12-06 17:15:50 +0100 |
---|---|---|
committer | Matthew Wilcox <willy@linux.intel.com> | 2007-12-06 23:35:35 +0100 |
commit | f776d12dd16da1b0cd55a1240002c1b31f315d5d (patch) | |
tree | b57a69c2143361edf6b2c2d4fd1b6e8616c8f347 | |
parent | Add TASK_WAKEKILL (diff) | |
download | linux-f776d12dd16da1b0cd55a1240002c1b31f315d5d.tar.xz linux-f776d12dd16da1b0cd55a1240002c1b31f315d5d.zip |
Add fatal_signal_pending
Like signal_pending, but it's only true for signals which are fatal to
this process
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
-rw-r--r-- | include/linux/sched.h | 9 | ||||
-rw-r--r-- | kernel/signal.c | 5 |
2 files changed, 13 insertions, 1 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 70d87f2fd23e..95395c143bab 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1872,7 +1872,14 @@ static inline int signal_pending(struct task_struct *p) { return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); } - + +extern int FASTCALL(__fatal_signal_pending(struct task_struct *p)); + +static inline int fatal_signal_pending(struct task_struct *p) +{ + return signal_pending(p) && __fatal_signal_pending(p); +} + static inline int need_resched(void) { return unlikely(test_thread_flag(TIF_NEED_RESCHED)); diff --git a/kernel/signal.c b/kernel/signal.c index fd4797f30628..657aa16d97cb 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -994,6 +994,11 @@ void zap_other_threads(struct task_struct *p) } } +int fastcall __fatal_signal_pending(struct task_struct *tsk) +{ + return sigismember(&tsk->pending.signal, SIGKILL); +} + /* * Must be called under rcu_read_lock() or with tasklist_lock read-held. */ |