diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2024-11-07 16:15:43 +0000 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2024-11-08 09:16:23 -0500 |
commit | 2500e7d7d2464e461cc6b6f9ab23ea12338832f9 (patch) | |
tree | 1b10d4891519a0289c76f2c986e91c2a087bcebe | |
parent | 9618dbfe52fa98e224e53e18626fbe08e9c892a7 (diff) | |
download | gdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.zip gdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.tar.gz gdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.tar.bz2 |
gdbserver: make remove_thread a method of process_info
Same idea as the previous patch, but for `remove_thread`.
Change-Id: I7e227655be5fcf29a3256e8389eb32051f27882d
Reviewed-By: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
-rw-r--r-- | gdbserver/gdbthread.h | 2 | ||||
-rw-r--r-- | gdbserver/inferiors.cc | 9 | ||||
-rw-r--r-- | gdbserver/inferiors.h | 5 | ||||
-rw-r--r-- | gdbserver/linux-low.cc | 4 | ||||
-rw-r--r-- | gdbserver/netbsd-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/win32-low.cc | 2 |
6 files changed, 13 insertions, 11 deletions
diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h index d00dc04..b45dc36 100644 --- a/gdbserver/gdbthread.h +++ b/gdbserver/gdbthread.h @@ -90,8 +90,6 @@ private: process_info *m_process; }; -void remove_thread (struct thread_info *thread); - /* Return a pointer to the first thread, or NULL if there isn't one. */ struct thread_info *get_first_thread (void); diff --git a/gdbserver/inferiors.cc b/gdbserver/inferiors.cc index 7d9152d..8ca6d64 100644 --- a/gdbserver/inferiors.cc +++ b/gdbserver/inferiors.cc @@ -100,23 +100,22 @@ find_any_thread_of_pid (int pid) } void -remove_thread (struct thread_info *thread) +process_info::remove_thread (thread_info *thread) { if (thread->btrace != NULL) target_disable_btrace (thread->btrace); discard_queued_stop_replies (ptid_of (thread)); - process_info *process = get_thread_process (thread); - gdb_assert (process != nullptr); if (current_thread == thread) switch_to_thread (nullptr); /* We should not try to remove a thread that was not added. */ - int num_erased = process->thread_map ().erase (thread->id); + gdb_assert (thread->process () == this); + int num_erased = m_ptid_thread_map.erase (thread->id); gdb_assert (num_erased > 0); - process->thread_list ().erase (process->thread_list ().iterator_to (*thread)); + m_thread_list.erase (m_thread_list.iterator_to (*thread)); } void * diff --git a/gdbserver/inferiors.h b/gdbserver/inferiors.h index fd3ee28..002dd2a 100644 --- a/gdbserver/inferiors.h +++ b/gdbserver/inferiors.h @@ -107,6 +107,11 @@ struct process_info : public intrusive_list_node<process_info> /* Add a thread with id ID to this process. */ thread_info *add_thread (ptid_t id, void *target_data); + /* Remove thread THREAD. + + THREAD must be part of this process' thread list. */ + void remove_thread (thread_info *thread); + private: /* This processes' thread list, sorted by creation order. */ owning_intrusive_list<thread_info> m_thread_list; diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index a21d562..924536c 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -398,11 +398,11 @@ linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine) void linux_process_target::delete_lwp (lwp_info *lwp) { - struct thread_info *thr = get_lwp_thread (lwp); + thread_info *thr = get_lwp_thread (lwp); threads_debug_printf ("deleting %ld", lwpid_of (thr)); - remove_thread (thr); + thr->process ()->remove_thread (thr); low_delete_thread (lwp->arch_private); diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc index 53cb6fa..332186f 100644 --- a/gdbserver/netbsd-low.cc +++ b/gdbserver/netbsd-low.cc @@ -303,7 +303,7 @@ netbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus, /* NetBSD does not store an LWP exit status. */ ourstatus->set_thread_exited (0); - remove_thread (thr); + thr->process ()->remove_thread (thr); } return wptid; } diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 3236bb9..18bdc12 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -188,7 +188,7 @@ delete_thread_info (thread_info *thread) { windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); - remove_thread (thread); + thread->process ()->remove_thread (thread); delete th; } |