From d0ffdf6482024331dc43d9c221c7afc5863a300b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 10 Mar 2022 16:56:57 -0700 Subject: [PATCH] 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. --- gdb/aix-thread.c | 2 +- gdb/darwin-nat.c | 3 ++- gdb/gdbthread.h | 7 +++++-- gdb/linux-thread-db.c | 3 ++- gdb/thread.c | 4 ++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index 74cc67c942b..8c45116f355 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -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++; } diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c index 4cf2d9f387a..588e9e2a345 100644 --- a/gdb/darwin-nat.c +++ b/gdb/darwin-nat.c @@ -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; diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index d294be6762b..baff68aee92 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -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; + /* 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 @@ public: struct frame_id initiating_frame = null_frame_id; /* Private data used by the target vector implementation. */ - std::unique_ptr 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 diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index 71a81aa0cb9..7d9fd57da0c 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -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); diff --git a/gdb/thread.c b/gdb/thread.c index 7f7f035b5ab..63ed87e9aa6 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -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 ()); -- 2.30.2