From: Simon Marchi Date: Thu, 7 Nov 2024 16:15:43 +0000 (+0000) Subject: gdbserver: make remove_thread a method of process_info X-Git-Tag: gdb-16-branchpoint~499 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2500e7d7d2464e461cc6b6f9ab23ea12338832f9;p=thirdparty%2Fbinutils-gdb.git 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 --- diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h index d00dc04d5a9..b45dc36c285 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 7d9152dae4c..8ca6d643264 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 fd3ee28fa52..002dd2a4ed6 100644 --- a/gdbserver/inferiors.h +++ b/gdbserver/inferiors.h @@ -107,6 +107,11 @@ struct process_info : public intrusive_list_node /* 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 m_thread_list; diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index a21d5625b48..924536c34fa 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 53cb6fa858c..332186ff718 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 3236bb9677f..18bdc12f6b5 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; }