Fixed a couple of races with exiting threads in suspend_for_ptrace().

diff --git a/server/ptrace.c b/server/ptrace.c
index a185ca7..bffe2e4 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -135,7 +135,7 @@
 }
 
 /* wait for a ptraced child to get a certain signal */
-static void wait4_thread( struct thread *thread, int signal )
+static int wait4_thread( struct thread *thread, int signal )
 {
     int res, status;
 
@@ -150,10 +150,11 @@
                 thread->attached = 0;
             }
             else perror( "wait4" );
-            return;
+            return 0;
         }
         res = handle_child_status( thread, res, status, signal );
     } while (res && res != signal);
+    return (thread->unix_pid != -1);
 }
 
 /* return the Unix pid to use in ptrace calls for a given thread */
@@ -199,8 +200,7 @@
     }
     if (debug_level) fprintf( stderr, "%04x: *attached*\n", thread->id );
     thread->attached = 1;
-    wait4_thread( thread, SIGSTOP );
-    return 1;
+    return wait4_thread( thread, SIGSTOP );
 }
 
 /* detach from a Unix thread and kill it */
@@ -260,8 +260,8 @@
 
     if (thread->attached)
     {
-        send_thread_signal( thread, SIGSTOP );
-        wait4_thread( thread, SIGSTOP );
+        if (!send_thread_signal( thread, SIGSTOP )) goto error;
+        if (!wait4_thread( thread, SIGSTOP )) goto error;
         return 1;
     }
     if (attach_thread( thread )) return 1;