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,
ptid_t (pid, 0, pbuf[pi].pthid),
priv);
private_thread_info_up (priv));
pi++;
}

View File

@ -351,7 +351,8 @@ darwin_nat_target::check_new_threads (inferior *inf)
pti->msg_state = DARWIN_RUNNING;
/* 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_ix++;
continue;

View File

@ -222,6 +222,9 @@ struct private_thread_info
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
user-selected thread is normally considered an implicit strong
reference and is thus not accounted in the refcount, unlike
@ -522,7 +525,7 @@ class thread_info : public refcounted_object,
struct frame_id initiating_frame = null_frame_id;
/* 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. */
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. */
extern struct thread_info *add_thread_with_info (process_stratum_target *targ,
ptid_t ptid,
private_thread_info *);
private_thread_info_up);
/* Delete thread THREAD and notify of thread exit. If the thread is
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
reused the tid of an old thread. */
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
tp->priv.reset (priv);

View File

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