diff options
-rw-r--r-- | gdb/gdbserver/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/gdbserver/gdbthread.h | 25 | ||||
-rw-r--r-- | gdb/gdbserver/inferiors.c | 15 | ||||
-rw-r--r-- | gdb/gdbserver/linux-low.c | 6 |
4 files changed, 38 insertions, 15 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 350843e..757265d 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2017-10-21 Simon Marchi <simon.marchi@ericsson.com> + + * gdbthread.h (find_thread, for_each_thread): New functions. + * inferiors.c (thread_of_pid): Remove. + (find_any_thread_of_pid): Use find_thread. + * linux-low.c (num_lwps): Use for_each_thread. + 2017-10-17 Yao Qi <yao.qi@linaro.org> * Makefile.in: Remove one rule. diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h index 8ace051..b82d5b0 100644 --- a/gdb/gdbserver/gdbthread.h +++ b/gdb/gdbserver/gdbthread.h @@ -111,6 +111,18 @@ find_thread (Func func) return NULL; } +/* Like the above, but only consider threads with pid PID. */ + +template <typename Func> +static thread_info * +find_thread (int pid, Func func) +{ + return find_thread ([&] (thread_info *thread) + { + return thread->id.pid () == pid && func (thread); + }); +} + /* Invoke FUNC for each thread. */ template <typename Func> @@ -128,6 +140,19 @@ for_each_thread (Func func) } } +/* Like the above, but only consider threads with pid PID. */ + +template <typename Func> +static void +for_each_thread (int pid, Func func) +{ + for_each_thread ([&] (thread_info *thread) + { + if (pid == thread->id.pid ()) + func (thread); + }); +} + /* Find the a random thread for which FUNC (THREAD) returns true. If no entry is found then return NULL. */ diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c index 564121f..a0ece4d 100644 --- a/gdb/gdbserver/inferiors.c +++ b/gdb/gdbserver/inferiors.c @@ -132,23 +132,14 @@ find_thread_process (const struct process_info *const process) return find_any_thread_of_pid (process->pid); } -/* Helper for find_any_thread_of_pid. Returns true if a thread - matches a PID. */ - -static int -thread_of_pid (thread_info *entry, void *pid_p) -{ - int pid = *(int *) pid_p; - - return (ptid_get_pid (entry->id) == pid); -} - /* See gdbthread.h. */ struct thread_info * find_any_thread_of_pid (int pid) { - return find_inferior (&all_threads, thread_of_pid, &pid); + return find_thread (pid, [] (thread_info *thread) { + return true; + }); } static void diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 0b93fa2..b367e53 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -1869,10 +1869,10 @@ num_lwps (int pid) { int count = 0; - for_each_thread ([&] (thread_info *thread) { - if (thread->id.pid () == pid) + for_each_thread (pid, [&] (thread_info *thread) + { count++; - }); + }); return count; } |