diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-12-06 23:51:34 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-12-06 23:51:34 +0000 |
commit | 230e5ab6a084ed50470f101934782dbf54b0d06b (patch) | |
tree | 5dd821c8d33f450470588e7a543f74bf74306e9e /kernel/exit.c | |
parent | c9b1c8a64c6444d189856f1e26bdcb8b4cd0113a (diff) |
Merge with Linux 2.1.67.
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index c99dc8b45..5ed96a90d 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -55,7 +55,7 @@ static inline void generate(unsigned long sig, struct task_struct * p) spin_lock(&p->sigmask_lock); p->signal |= mask; spin_unlock(&p->sigmask_lock); - if (p->state == TASK_INTERRUPTIBLE && (p->signal & ~p->blocked)) + if (p->state == TASK_INTERRUPTIBLE && signal_pending(p)) wake_up_process(p); out: spin_unlock_irqrestore(&p->sig->siglock, flags); @@ -349,7 +349,8 @@ static inline void forget_original_parent(struct task_struct * father) for_each_task(p) { if (p->p_opptr == father) { p->exit_signal = SIGCHLD; - p->p_opptr = task[smp_num_cpus] ? : task[0]; /* init */ + p->p_opptr = task[smp_num_cpus] ? : task[0]; /* init */ + if (p->pdeath_signal) send_sig(p->pdeath_signal, p, 0); } } read_unlock(&tasklist_lock); @@ -659,7 +660,7 @@ repeat: if (options & WNOHANG) goto end_wait4; retval = -ERESTARTSYS; - if (current->signal & ~current->blocked) + if (signal_pending(current)) goto end_wait4; current->state=TASK_INTERRUPTIBLE; schedule(); |