summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2007-12-06 17:15:50 +0100
committerMatthew Wilcox <willy@linux.intel.com>2007-12-06 23:35:35 +0100
commitf776d12dd16da1b0cd55a1240002c1b31f315d5d (patch)
treeb57a69c2143361edf6b2c2d4fd1b6e8616c8f347
parentAdd TASK_WAKEKILL (diff)
downloadlinux-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.h9
-rw-r--r--kernel/signal.c5
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.
*/