aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdbserver/gdbthread.h21
-rw-r--r--gdbserver/inferiors.cc11
2 files changed, 18 insertions, 14 deletions
diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h
index 0e45f9a..fc9b4d2 100644
--- a/gdbserver/gdbthread.h
+++ b/gdbserver/gdbthread.h
@@ -29,20 +29,31 @@ struct regcache;
struct thread_info
{
+ thread_info (ptid_t id, void *target_data)
+ : id (id), target_data (target_data)
+ {
+ this->last_status.kind = TARGET_WAITKIND_IGNORE;
+ }
+
+ ~thread_info ()
+ {
+ free_register_cache (this->regcache_data);
+ }
+
/* The id of this thread. */
ptid_t id;
void *target_data;
- struct regcache *regcache_data;
+ struct regcache *regcache_data = nullptr;
/* The last resume GDB requested on this thread. */
- enum resume_kind last_resume_kind;
+ enum resume_kind last_resume_kind = resume_continue;
/* The last wait status reported for this thread. */
struct target_waitstatus last_status;
/* True if LAST_STATUS hasn't been reported to GDB yet. */
- int status_pending_p;
+ int status_pending_p = 0;
/* Given `while-stepping', a thread may be collecting data for more
than one tracepoint simultaneously. E.g.:
@@ -67,10 +78,10 @@ struct thread_info
tracepoint actions this thread is now collecting; NULL if empty.
Each item in the list holds the current step of the while-stepping
action. */
- struct wstep_state *while_stepping;
+ struct wstep_state *while_stepping = nullptr;
/* Branch trace target information for this thread. */
- struct btrace_target_info *btrace;
+ struct btrace_target_info *btrace = nullptr;
};
extern std::list<thread_info *> all_threads;
diff --git a/gdbserver/inferiors.cc b/gdbserver/inferiors.cc
index 32f8478..a636266 100644
--- a/gdbserver/inferiors.cc
+++ b/gdbserver/inferiors.cc
@@ -36,19 +36,13 @@ static std::string current_inferior_cwd;
struct thread_info *
add_thread (ptid_t thread_id, void *target_data)
{
- struct thread_info *new_thread = XCNEW (struct thread_info);
-
- new_thread->id = thread_id;
- new_thread->last_resume_kind = resume_continue;
- new_thread->last_status.kind = TARGET_WAITKIND_IGNORE;
+ thread_info *new_thread = new thread_info (thread_id, target_data);
all_threads.push_back (new_thread);
if (current_thread == NULL)
current_thread = new_thread;
- new_thread->target_data = target_data;
-
return new_thread;
}
@@ -93,8 +87,7 @@ find_any_thread_of_pid (int pid)
static void
free_one_thread (thread_info *thread)
{
- free_register_cache (thread_regcache_data (thread));
- free (thread);
+ delete thread;
}
void