* linux-nat.c (linux_nat_filter_events): Do not delete the lwp if
authorJoel Brobecker <brobecker@gnat.com>
Wed, 1 Apr 2009 18:56:30 +0000 (18:56 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 1 Apr 2009 18:56:30 +0000 (18:56 +0000)
        this is the last one.

gdb/ChangeLog
gdb/linux-nat.c

index b9d41976e4e49841828acb491f55fa68c3deb128..dab545811aecf2cd7daba130d4ee7188315d7a67 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-01  Joel Brobecker  <brobecker@adacore.com>
+
+       * linux-nat.c (linux_nat_filter_events): Do not delete the lwp if
+       this is the last one.
+
 2009-04-01  Pedro Alves  <pedro@codesourcery.com>
 
        * remote.c (append_resumption): New.
index be99ecea9b4d77d9bb0b2eeb150a1e98dcffe2d9..c511a7d19aa53a18113761dc1cf45e41075a90a2 100644 (file)
@@ -2623,16 +2623,16 @@ linux_nat_filter_event (int lwpid, int status, int options)
   /* Check if the thread has exited.  */
   if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
     {
-      /* If this is the main thread, we must stop all threads and
-        verify if they are still alive.  This is because in the nptl
-        thread model, there is no signal issued for exiting LWPs
+      /* If this is the main thread, we must stop all threads and verify
+        if they are still alive.  This is because in the nptl thread model
+        on Linux 2.4, there is no signal issued for exiting LWPs
         other than the main thread.  We only get the main thread exit
         signal once all child threads have already exited.  If we
         stop all the threads and use the stop_wait_callback to check
         if they have exited we can determine whether this signal
         should be ignored or whether it means the end of the debugged
         application, regardless of which threading model is being
-        used.  */
+        used.  */
       if (GET_PID (lp->ptid) == GET_LWP (lp->ptid))
        {
          lp->stopped = 1;
@@ -2644,13 +2644,14 @@ linux_nat_filter_event (int lwpid, int status, int options)
                            "LLW: %s exited.\n",
                            target_pid_to_str (lp->ptid));
 
-      exit_lwp (lp);
-
-      /* If there is at least one more LWP, then the exit signal was
-        not the end of the debugged application and should be
-        ignored.  */
-      if (num_lwps > 0)
-       return NULL;
+      if (num_lwps > 1)
+       {
+        /* If there is at least one more LWP, then the exit signal
+           was not the end of the debugged application and should be
+           ignored.  */
+        exit_lwp (lp);
+        return NULL;
+       }
     }
 
   /* Check if the current LWP has previously exited.  In the nptl