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>
This commit is contained in:
Simon Marchi
2024-11-07 16:15:43 +00:00
committed by Simon Marchi
parent 9618dbfe52
commit 2500e7d7d2
6 changed files with 13 additions and 11 deletions

View File

@@ -90,8 +90,6 @@ private:
process_info *m_process; 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. */ /* Return a pointer to the first thread, or NULL if there isn't one. */
struct thread_info *get_first_thread (void); struct thread_info *get_first_thread (void);

View File

@@ -100,23 +100,22 @@ find_any_thread_of_pid (int pid)
} }
void void
remove_thread (struct thread_info *thread) process_info::remove_thread (thread_info *thread)
{ {
if (thread->btrace != NULL) if (thread->btrace != NULL)
target_disable_btrace (thread->btrace); target_disable_btrace (thread->btrace);
discard_queued_stop_replies (ptid_of (thread)); discard_queued_stop_replies (ptid_of (thread));
process_info *process = get_thread_process (thread);
gdb_assert (process != nullptr);
if (current_thread == thread) if (current_thread == thread)
switch_to_thread (nullptr); switch_to_thread (nullptr);
/* We should not try to remove a thread that was not added. */ /* 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); 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 * void *

View File

@@ -107,6 +107,11 @@ struct process_info : public intrusive_list_node<process_info>
/* Add a thread with id ID to this process. */ /* Add a thread with id ID to this process. */
thread_info *add_thread (ptid_t id, void *target_data); 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: private:
/* This processes' thread list, sorted by creation order. */ /* This processes' thread list, sorted by creation order. */
owning_intrusive_list<thread_info> m_thread_list; owning_intrusive_list<thread_info> m_thread_list;

View File

@@ -398,11 +398,11 @@ linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
void void
linux_process_target::delete_lwp (lwp_info *lwp) 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)); threads_debug_printf ("deleting %ld", lwpid_of (thr));
remove_thread (thr); thr->process ()->remove_thread (thr);
low_delete_thread (lwp->arch_private); low_delete_thread (lwp->arch_private);

View File

@@ -303,7 +303,7 @@ netbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus,
/* NetBSD does not store an LWP exit status. */ /* NetBSD does not store an LWP exit status. */
ourstatus->set_thread_exited (0); ourstatus->set_thread_exited (0);
remove_thread (thr); thr->process ()->remove_thread (thr);
} }
return wptid; return wptid;
} }

View File

@@ -188,7 +188,7 @@ delete_thread_info (thread_info *thread)
{ {
windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); windows_thread_info *th = (windows_thread_info *) thread_target_data (thread);
remove_thread (thread); thread->process ()->remove_thread (thread);
delete th; delete th;
} }