aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2022-03-10 16:56:57 -0700
committerTom Tromey <tom@tromey.com>2023-08-10 10:50:37 -0600
commitd0ffdf6482024331dc43d9c221c7afc5863a300b (patch)
tree22bc10e78fac4db876bbd5190011d5da0ee465dc
parent67bed49ec852aee39172fc867a89ec78c4903883 (diff)
downloadgdb-d0ffdf6482024331dc43d9c221c7afc5863a300b.zip
gdb-d0ffdf6482024331dc43d9c221c7afc5863a300b.tar.gz
gdb-d0ffdf6482024331dc43d9c221c7afc5863a300b.tar.bz2
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.
-rw-r--r--gdb/aix-thread.c2
-rw-r--r--gdb/darwin-nat.c3
-rw-r--r--gdb/gdbthread.h7
-rw-r--r--gdb/linux-thread-db.c3
-rw-r--r--gdb/thread.c4
5 files changed, 12 insertions, 7 deletions
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index 74cc67c..8c45116 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 4cf2d9f..588e9e2 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 d294be6..baff68a 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<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 @@ public:
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
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 71a81aa..7d9fd57 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 7f7f035..63ed87e 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 ());