2011-09-13 Pedro Alves <pedro@codesourcery.com>

* inferior.h (ALL_INFERIORS): New.
	* linux-thread-db.c (thread_db_find_new_threads_2): Remove check
	for a stopped thread.
	(thread_db_find_new_threads): Look for threads in all inferiors.
This commit is contained in:
Pedro Alves 2011-09-13 19:27:01 +00:00
parent a1398e0c56
commit c65b3e0d43
3 changed files with 28 additions and 18 deletions

View File

@ -1,3 +1,10 @@
2011-09-13 Pedro Alves <pedro@codesourcery.com>
* inferior.h (ALL_INFERIORS): New.
* linux-thread-db.c (thread_db_find_new_threads_2): Remove check
for a stopped thread.
(thread_db_find_new_threads): Look for threads in all inferiors.
2011-09-13 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (update_watchpoint): Handle the case of the

View File

@ -615,6 +615,11 @@ extern void set_current_inferior (struct inferior *);
extern struct cleanup *save_current_inferior (void);
/* Traverse all inferiors. */
#define ALL_INFERIORS(I) \
for ((I) = inferior_list; (I); (I) = (I)->next)
extern struct inferior *inferior_list;
/* Prune away automatically added inferiors that aren't required

View File

@ -1552,20 +1552,6 @@ thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
int pid = ptid_get_pid (ptid);
int i, loop;
if (target_has_execution)
{
struct lwp_info *lp;
/* In linux, we can only read memory through a stopped lwp. */
ALL_LWPS (lp, ptid)
if (lp->stopped && ptid_get_pid (lp->ptid) == pid)
break;
if (!lp)
/* There is no stopped thread. Bail out. */
return;
}
info = get_thread_db_info (GET_PID (ptid));
/* Access an lwp we know is stopped. */
@ -1607,13 +1593,25 @@ static void
thread_db_find_new_threads (struct target_ops *ops)
{
struct thread_db_info *info;
struct inferior *inf;
info = get_thread_db_info (GET_PID (inferior_ptid));
ALL_INFERIORS (inf)
{
struct thread_info *thread;
if (info == NULL)
return;
if (inf->pid == 0)
continue;
thread_db_find_new_threads_1 (inferior_ptid);
info = get_thread_db_info (inf->pid);
if (info == NULL)
continue;
thread = any_live_thread_of_process (inf->pid);
if (thread == NULL || thread->executing)
continue;
thread_db_find_new_threads_1 (thread->ptid);
}
if (target_has_execution)
iterate_over_lwps (minus_one_ptid /* iterate over all */,