diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 3a233bbcd7..5183022ce0 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2017-11-19 Simon Marchi + + * gdbthread.h (find_thread): Add overload with ptid_t filter. + * linux-low.c (struct iterate_over_lwps_args): Remove. + (iterate_over_lwps_filter): Remove. + (iterate_over_lwps): Use find_thread. + 2017-11-19 Simon Marchi * linux-low.c (reset_lwp_ptrace_options_callback): Remove. diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h index b82d5b0e72..df1e4778de 100644 --- a/gdb/gdbserver/gdbthread.h +++ b/gdb/gdbserver/gdbthread.h @@ -123,6 +123,18 @@ find_thread (int pid, Func func) }); } +/* Find the first thread that matches FILTER for which FUNC returns true. + Return NULL if no thread satisfying these conditions is found. */ + +template +static thread_info * +find_thread (ptid_t filter, Func func) +{ + return find_thread ([&] (thread_info *thread) { + return thread->id.matches (filter) && func (thread); + }); +} + /* Invoke FUNC for each thread. */ template diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 628135a49b..fd8e45e37c 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -1876,42 +1876,6 @@ num_lwps (int pid) return count; } -/* The arguments passed to iterate_over_lwps. */ - -struct iterate_over_lwps_args -{ - /* The FILTER argument passed to iterate_over_lwps. */ - ptid_t filter; - - /* The CALLBACK argument passed to iterate_over_lwps. */ - iterate_over_lwps_ftype *callback; - - /* The DATA argument passed to iterate_over_lwps. */ - void *data; -}; - -/* Callback for find_inferior used by iterate_over_lwps to filter - calls to the callback supplied to that function. Returning a - nonzero value causes find_inferiors to stop iterating and return - the current inferior_list_entry. Returning zero indicates that - find_inferiors should continue iterating. */ - -static int -iterate_over_lwps_filter (thread_info *thread, void *args_p) -{ - struct iterate_over_lwps_args *args - = (struct iterate_over_lwps_args *) args_p; - - if (thread->id.matches (args->filter)) - { - struct lwp_info *lwp = get_thread_lwp (thread); - - return (*args->callback) (lwp, args->data); - } - - return 0; -} - /* See nat/linux-nat.h. */ struct lwp_info * @@ -1919,10 +1883,13 @@ iterate_over_lwps (ptid_t filter, iterate_over_lwps_ftype callback, void *data) { - struct iterate_over_lwps_args args = {filter, callback, data}; + thread_info *thread = find_thread (filter, [&] (thread_info *thread) + { + lwp_info *lwp = get_thread_lwp (thread); + + return callback (lwp, data); + }); - thread_info *thread = find_inferior (&all_threads, iterate_over_lwps_filter, - &args); if (thread == NULL) return NULL;