--- 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);