static int thread_db_create_event (CORE_ADDR where) { td_event_msg_t msg; td_err_e err; struct lwp_info *lwp; struct thread_db *thread_db = current_process ()->priv->thread_db; gdb_assert (thread_db->td_ta_event_getmsg_p != NULL); if (debug_threads) debug_printf ("Thread creation event.\n"); /* FIXME: This assumes we don't get another event. In the LinuxThreads implementation, this is safe, because all events come from the manager thread (except for its own creation, of course). */ err = thread_db->td_ta_event_getmsg_p (thread_db->thread_agent, &msg); if (err != TD_OK) fprintf (stderr, "thread getmsg err: %s\n", thread_db_err_str (err)); /* If we do not know about the main thread yet, this would be a good time to find it. We need to do this to pick up the main thread before any newly created threads. */ lwp = get_thread_lwp (current_thread); if (lwp->thread_known == 0) find_one_thread (current_thread->entry.id); /* msg.event == TD_EVENT_CREATE */ find_new_threads_callback (msg.th_p, NULL); return 0; }
static void thread_db_create_event (CORE_ADDR where) { td_event_msg_t msg; td_err_e err; struct inferior_linux_data *tdata; if (debug_threads) fprintf (stderr, "Thread creation event.\n"); tdata = inferior_target_data (current_inferior); /* FIXME: This assumes we don't get another event. In the LinuxThreads implementation, this is safe, because all events come from the manager thread (except for its own creation, of course). */ err = td_ta_event_getmsg (thread_agent, &msg); if (err != TD_OK) fprintf (stderr, "thread getmsg err: %s\n", thread_db_err_str (err)); /* msg.event == TD_EVENT_CREATE */ find_new_threads_callback (msg.th_p, NULL); }