* linux-nat.c (child_follow_fork, linux_handle_extended_wait)
authorDaniel Jacobowitz <drow@false.org>
Sun, 15 May 2005 17:00:37 +0000 (17:00 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sun, 15 May 2005 17:00:37 +0000 (17:00 +0000)
(lin_lwp_attach_lwp, linux_nat_attach, wait_lwp, child_wait)
(linux_nat_wait, kill_wait_callback): Use my_waitpid.
(_initialize_linux_nat, lin_thread_get_thread_signals): Use
SA_RESTART.

gdb/ChangeLog
gdb/linux-nat.c

index 8e017b6c1591b07c8c9e430af5100e1662df120e..fbb6bc6f930a9e7c97269c2ed058a280e3ad42c2 100644 (file)
@@ -1,3 +1,11 @@
+2005-05-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * linux-nat.c (child_follow_fork, linux_handle_extended_wait)
+       (lin_lwp_attach_lwp, linux_nat_attach, wait_lwp, child_wait)
+       (linux_nat_wait, kill_wait_callback): Use my_waitpid.
+       (_initialize_linux_nat, lin_thread_get_thread_signals): Use
+       SA_RESTART.
+
 2005-05-14  Mark Kettenis  <kettenis@gnu.org>
 
        * configure.tgt (vax-*-openbsd*): Set gdb_target to obsd.
index faff62e7b1d0a65223d2f5d95e3278397e34f7f3..b39d7926efb77cf8c3313aaa86e078572211a246 100644 (file)
@@ -377,7 +377,7 @@ child_follow_fork (int follow_child)
              int status;
 
              ptrace (PTRACE_CONT, parent_pid, 0, 0);
-             waitpid (parent_pid, &status, __WALL);
+             my_waitpid (parent_pid, &status, __WALL);
              if ((status >> 16) != PTRACE_EVENT_VFORK_DONE)
                warning (_("Unexpected waitpid result %06x when waiting for "
                         "vfork-done"), status);
@@ -494,10 +494,8 @@ linux_handle_extended_wait (int pid, int status,
        {
          /* The new child has a pending SIGSTOP.  We can't affect it until it
             hits the SIGSTOP, but we're already attached.  */
-         do {
-           ret = waitpid (new_pid, &status,
-                          (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
-         } while (ret == -1 && errno == EINTR);
+         ret = my_waitpid (new_pid, &status,
+                           (event == PTRACE_EVENT_CLONE) ? __WCLONE : 0);
          if (ret == -1)
            perror_with_name (_("waiting for new child"));
          else if (ret != new_pid)
@@ -868,11 +866,11 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose)
                            "LLAL: PTRACE_ATTACH %s, 0, 0 (OK)\n",
                            target_pid_to_str (ptid));
 
-      pid = waitpid (GET_LWP (ptid), &status, 0);
+      pid = my_waitpid (GET_LWP (ptid), &status, 0);
       if (pid == -1 && errno == ECHILD)
        {
          /* Try again with __WCLONE to check cloned processes.  */
-         pid = waitpid (GET_LWP (ptid), &status, __WCLONE);
+         pid = my_waitpid (GET_LWP (ptid), &status, __WCLONE);
          lp->cloned = 1;
        }
 
@@ -920,13 +918,13 @@ linux_nat_attach (char *args, int from_tty)
   /* Make sure the initial process is stopped.  The user-level threads
      layer might want to poke around in the inferior, and that won't
      work if things haven't stabilized yet.  */
-  pid = waitpid (GET_PID (inferior_ptid), &status, 0);
+  pid = my_waitpid (GET_PID (inferior_ptid), &status, 0);
   if (pid == -1 && errno == ECHILD)
     {
       warning (_("%s is a cloned process"), target_pid_to_str (inferior_ptid));
 
       /* Try again with __WCLONE to check cloned processes.  */
-      pid = waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
+      pid = my_waitpid (GET_PID (inferior_ptid), &status, __WCLONE);
       lp->cloned = 1;
     }
 
@@ -1191,10 +1189,10 @@ wait_lwp (struct lwp_info *lp)
   gdb_assert (!lp->stopped);
   gdb_assert (lp->status == 0);
 
-  pid = waitpid (GET_LWP (lp->ptid), &status, 0);
+  pid = my_waitpid (GET_LWP (lp->ptid), &status, 0);
   if (pid == -1 && errno == ECHILD)
     {
-      pid = waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
+      pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE);
       if (pid == -1 && errno == ECHILD)
        {
          /* The thread has previously exited.  We need to delete it
@@ -1706,10 +1704,10 @@ child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
                                   attached process.  */
       set_sigio_trap ();
 
-      pid = waitpid (GET_PID (ptid), &status, 0);
+      pid = my_waitpid (GET_PID (ptid), &status, 0);
       if (pid == -1 && errno == ECHILD)
        /* Try again with __WCLONE to check cloned processes.  */
-       pid = waitpid (GET_PID (ptid), &status, __WCLONE);
+       pid = my_waitpid (GET_PID (ptid), &status, __WCLONE);
 
       if (debug_linux_nat)
        {
@@ -1920,7 +1918,7 @@ retry:
     {
       pid_t lwpid;
 
-      lwpid = waitpid (pid, &status, options);
+      lwpid = my_waitpid (pid, &status, options);
       if (lwpid > 0)
        {
          gdb_assert (pid == -1 || lwpid == pid);
@@ -2264,7 +2262,7 @@ kill_wait_callback (struct lwp_info *lp, void *data)
     {
       do
        {
-         pid = waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
+         pid = my_waitpid (GET_LWP (lp->ptid), NULL, __WCLONE);
          if (pid != (pid_t) -1 && debug_linux_nat)
            {
              fprintf_unfiltered (gdb_stdlog,
@@ -2279,7 +2277,7 @@ kill_wait_callback (struct lwp_info *lp, void *data)
 
   do
     {
-      pid = waitpid (GET_LWP (lp->ptid), NULL, 0);
+      pid = my_waitpid (GET_LWP (lp->ptid), NULL, 0);
       if (pid != (pid_t) -1 && debug_linux_nat)
        {
          fprintf_unfiltered (gdb_stdlog,
@@ -3095,7 +3093,7 @@ Specify any of the following keywords for detailed info:\n\
 
   action.sa_handler = sigchld_handler;
   sigemptyset (&action.sa_mask);
-  action.sa_flags = 0;
+  action.sa_flags = SA_RESTART;
   sigaction (SIGCHLD, &action, NULL);
 
   /* Make sure we don't block SIGCHLD during a sigsuspend.  */
@@ -3168,7 +3166,7 @@ lin_thread_get_thread_signals (sigset_t *set)
 
   action.sa_handler = sigchld_handler;
   sigemptyset (&action.sa_mask);
-  action.sa_flags = 0;
+  action.sa_flags = SA_RESTART;
   sigaction (cancel, &action, NULL);
 
   /* We block the "cancel" signal throughout this code ...  */