If child crashes, report this first. Print which signal.
authorUlrich Drepper <drepper@redhat.com>
Wed, 15 Dec 2004 06:06:02 +0000 (06:06 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 15 Dec 2004 06:06:02 +0000 (06:06 +0000)
nptl/tst-getpid1.c

index 061b48d..497bebe 100644 (file)
@@ -1,5 +1,6 @@
 #include <sched.h>
 #include <signal.h>
+#include <string.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/types.h>
@@ -66,20 +67,6 @@ do_test (void)
       }
   while  (si.si_signo != sig || si.si_code != SI_QUEUE);
 
-  if (si.si_int != (int) p)
-    {
-      printf ("expected PID %d, got si_int %d\n", (int) p, si.si_int);
-      kill (p, SIGKILL);
-      return 1;
-    }
-
-  if (si.si_pid != p)
-    {
-      printf ("expected PID %d, got si_pid %d\n", (int) p, (int) si.si_pid);
-      kill (p, SIGKILL);
-      return 1;
-    }
-
   int e;
   if (waitpid (p, &e, __WCLONE) != p)
     {
@@ -89,7 +76,10 @@ do_test (void)
     }
   if (!WIFEXITED (e))
     {
-      puts ("did not terminate correctly");
+      if (WIFSIGNALED (e))
+       printf ("died from signal %s\n", strsignal (WTERMSIG (e)));
+      else
+       puts ("did not terminate correctly");
       return 1;
     }
   if (WEXITSTATUS (e) != 0)
@@ -98,6 +88,20 @@ do_test (void)
       return 1;
     }
 
+  if (si.si_int != (int) p)
+    {
+      printf ("expected PID %d, got si_int %d\n", (int) p, si.si_int);
+      kill (p, SIGKILL);
+      return 1;
+    }
+
+  if (si.si_pid != p)
+    {
+      printf ("expected PID %d, got si_pid %d\n", (int) p, (int) si.si_pid);
+      kill (p, SIGKILL);
+      return 1;
+    }
+
   if (getpid () != mypid)
     {
       puts ("my PID changed");