* inf-ttrace.c (inf_ttrace_wait): On TTEVT_LWP_CREATE and
authorPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:30:23 +0000 (21:30 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:30:23 +0000 (21:30 +0000)
LWP_TERMINATE, resume the caller thread.  On TTEVT_LWP_CREATE,
TTEVT_LWP_EXIT and TTEVT_LWP_TERMINATE, don't stop the whole
process, and return TARGET_WAITKIND_IGNORE.

gdb/ChangeLog
gdb/inf-ttrace.c

index cbb30505f301d1f5bd5d5011e4e2042c2877bfd6..aafe0a0d2eb412e7bc397b386c55a19f42e5fea5 100644 (file)
@@ -1,3 +1,10 @@
+2008-09-08  Pedro Alves  <pedro@codesourcery.com>
+
+       * inf-ttrace.c (inf_ttrace_wait): On TTEVT_LWP_CREATE and
+       LWP_TERMINATE, resume the caller thread.  On TTEVT_LWP_CREATE,
+       TTEVT_LWP_EXIT and TTEVT_LWP_TERMINATE, don't stop the whole
+       process, and return TARGET_WAITKIND_IGNORE.
+
 2008-09-08  Pedro Alves  <pedro@codesourcery.com>
 
        * inf-ttrace.c: Include <signal.h>
index 8284561077222d3edced60345bb7f0dc688db353..0ad915761ab1779316b609374810aa5178244c71 100644 (file)
@@ -1040,7 +1040,12 @@ inf_ttrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
              sizeof (struct inf_ttrace_private_thread_info));
       inf_ttrace_num_lwps++;
       ptid = ptid_build (tts.tts_pid, tts.tts_lwpid, 0);
-      break;
+      /* Let the lwp_create-caller thread continue.  */
+      ttrace (TT_LWP_CONTINUE, ptid_get_pid (ptid),
+              ptid_get_lwp (ptid), TT_NOPC, 0, 0);
+      /* Return without stopping the whole process.  */
+      ourstatus->kind = TARGET_WAITKIND_IGNORE;
+      return ptid;
 
     case TTEVT_LWP_EXIT:
       if (print_thread_events)
@@ -1049,22 +1054,31 @@ inf_ttrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
       gdb_assert (ti != NULL);
       ((struct inf_ttrace_private_thread_info *)ti->private)->dying = 1;
       inf_ttrace_num_lwps--;
+      /* Let the thread really exit.  */
       ttrace (TT_LWP_CONTINUE, ptid_get_pid (ptid),
               ptid_get_lwp (ptid), TT_NOPC, 0, 0);
-      /* If we don't return -1 here, core GDB will re-add the thread.  */
-      ptid = minus_one_ptid;
-      break;
+      /* Return without stopping the whole process.  */
+      ourstatus->kind = TARGET_WAITKIND_IGNORE;
+      return ptid;
 
     case TTEVT_LWP_TERMINATE:
       lwpid = tts.tts_u.tts_thread.tts_target_lwpid;
       ptid = ptid_build (tts.tts_pid, lwpid, 0);
-      printf_filtered(_("[%s has been terminated]\n"), target_pid_to_str (ptid));
+      if (print_thread_events)
+       printf_unfiltered(_("[%s has been terminated]\n")
+                         target_pid_to_str (ptid));
       ti = find_thread_pid (ptid);
       gdb_assert (ti != NULL);
       ((struct inf_ttrace_private_thread_info *)ti->private)->dying = 1;
       inf_ttrace_num_lwps--;
+
+      /* Resume the lwp_terminate-caller thread.  */
       ptid = ptid_build (tts.tts_pid, tts.tts_lwpid, 0);
-      break;
+      ttrace (TT_LWP_CONTINUE, ptid_get_pid (ptid),
+              ptid_get_lwp (ptid), TT_NOPC, 0, 0);
+      /* Return without stopping the whole process.  */
+      ourstatus->kind = TARGET_WAITKIND_IGNORE;
+      return ptid;
 
     case TTEVT_SIGNAL:
       ourstatus->kind = TARGET_WAITKIND_STOPPED;