Pass unique_ptr to add_thread_with_info

This changes add_thread_with_info to accept a unique_ptr, making it
clear that it takes ownership of the passed-in pointer.

I can't test the AIX or Darwin changes, but I think they are
relatively obvious.
This commit is contained in:
Tom Tromey
2022-03-10 16:56:57 -07:00
parent 67bed49ec8
commit d0ffdf6482
5 changed files with 12 additions and 7 deletions

View File

@ -899,7 +899,7 @@ sync_threadlists (pid_t pid)
thread = add_thread_with_info (proc_target, thread = add_thread_with_info (proc_target,
ptid_t (pid, 0, pbuf[pi].pthid), ptid_t (pid, 0, pbuf[pi].pthid),
priv); private_thread_info_up (priv));
pi++; pi++;
} }

View File

@ -351,7 +351,8 @@ darwin_nat_target::check_new_threads (inferior *inf)
pti->msg_state = DARWIN_RUNNING; pti->msg_state = DARWIN_RUNNING;
/* Add the new thread. */ /* Add the new thread. */
add_thread_with_info (this, ptid_t (inf->pid, 0, new_id), pti); add_thread_with_info (this, ptid_t (inf->pid, 0, new_id),
private_thread_info_up (pti));
new_thread_vec.push_back (pti); new_thread_vec.push_back (pti);
new_ix++; new_ix++;
continue; continue;

View File

@ -222,6 +222,9 @@ struct private_thread_info
virtual ~private_thread_info () = 0; virtual ~private_thread_info () = 0;
}; };
/* Unique pointer wrapper for private_thread_info. */
using private_thread_info_up = std::unique_ptr<private_thread_info>;
/* Threads are intrusively refcounted objects. Being the /* Threads are intrusively refcounted objects. Being the
user-selected thread is normally considered an implicit strong user-selected thread is normally considered an implicit strong
reference and is thus not accounted in the refcount, unlike reference and is thus not accounted in the refcount, unlike
@ -522,7 +525,7 @@ public:
struct frame_id initiating_frame = null_frame_id; struct frame_id initiating_frame = null_frame_id;
/* Private data used by the target vector implementation. */ /* Private data used by the target vector implementation. */
std::unique_ptr<private_thread_info> priv; private_thread_info_up priv;
/* Branch trace information for this thread. */ /* Branch trace information for this thread. */
struct btrace_thread_info btrace {}; struct btrace_thread_info btrace {};
@ -616,7 +619,7 @@ extern struct thread_info *add_thread_silent (process_stratum_target *targ,
/* Same as add_thread, and sets the private info. */ /* Same as add_thread, and sets the private info. */
extern struct thread_info *add_thread_with_info (process_stratum_target *targ, extern struct thread_info *add_thread_with_info (process_stratum_target *targ,
ptid_t ptid, ptid_t ptid,
private_thread_info *); private_thread_info_up);
/* Delete thread THREAD and notify of thread exit. If the thread is /* Delete thread THREAD and notify of thread exit. If the thread is
currently not deletable, don't actually delete it but still tag it currently not deletable, don't actually delete it but still tag it

View File

@ -1366,7 +1366,8 @@ record_thread (struct thread_db_info *info,
thread with this PTID, but it's marked exited, then the kernel thread with this PTID, but it's marked exited, then the kernel
reused the tid of an old thread. */ reused the tid of an old thread. */
if (tp == NULL || tp->state == THREAD_EXITED) if (tp == NULL || tp->state == THREAD_EXITED)
tp = add_thread_with_info (info->process_target, ptid, priv); tp = add_thread_with_info (info->process_target, ptid,
private_thread_info_up (priv));
else else
tp->priv.reset (priv); tp->priv.reset (priv);

View File

@ -306,11 +306,11 @@ add_thread_silent (process_stratum_target *targ, ptid_t ptid)
struct thread_info * struct thread_info *
add_thread_with_info (process_stratum_target *targ, ptid_t ptid, add_thread_with_info (process_stratum_target *targ, ptid_t ptid,
private_thread_info *priv) private_thread_info_up priv)
{ {
thread_info *result = add_thread_silent (targ, ptid); thread_info *result = add_thread_silent (targ, ptid);
result->priv.reset (priv); result->priv = std::move (priv);
if (print_thread_events) if (print_thread_events)
gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid).c_str ()); gdb_printf (_("[New %s]\n"), target_pid_to_str (ptid).c_str ());