--- 2.4.10pre6aa1/kernel/signal.c.~1~ Sun Sep 9 06:05:10 2001 +++ 2.4.10pre6aa1/kernel/signal.c Mon Sep 10 04:52:34 2001 @@ -467,11 +467,6 @@ { t->sigpending = 1; - if (t->state & TASK_INTERRUPTIBLE) { - wake_up_process(t); - return; - } - #ifdef CONFIG_SMP /* * If the task is running on a different CPU @@ -488,6 +483,11 @@ smp_send_reschedule(t->processor); spin_unlock(&runqueue_lock); #endif /* CONFIG_SMP */ + + if (t->state & TASK_INTERRUPTIBLE) { + wake_up_process(t); + return; + } } static int deliver_signal(int sig, struct siginfo *info, struct task_struct *t) @@ -544,8 +544,6 @@ ret = deliver_signal(sig, info, t); out: spin_unlock_irqrestore(&t->sigmask_lock, flags); - if ((t->state & TASK_INTERRUPTIBLE) && signal_pending(t)) - wake_up_process(t); out_nolock: #if DEBUG_SIG printk(" %d -> %d\n", signal_pending(t), ret);