mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-12-19 01:19:41 +08:00
gdbserver: use unique_ptr for thread_info's regcache
Store the regcache pointer in thread_info as a unique_ptr. This allows us delete the thread_info destructor. Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "gdbsupport/function-view.h"
|
||||
#include "gdbsupport/intrusive_list.h"
|
||||
#include <memory>
|
||||
|
||||
struct btrace_target_info;
|
||||
struct regcache;
|
||||
@@ -31,20 +32,15 @@ struct thread_info : public intrusive_list_node<thread_info>
|
||||
: id (id), m_process (process), m_target_data (target_data)
|
||||
{}
|
||||
|
||||
~thread_info ()
|
||||
{
|
||||
delete m_regcache;
|
||||
}
|
||||
|
||||
/* Return the process owning this thread. */
|
||||
process_info *process () const
|
||||
{ return m_process; }
|
||||
|
||||
struct regcache *regcache ()
|
||||
{ return m_regcache; }
|
||||
{ return m_regcache.get (); }
|
||||
|
||||
void set_regcache (struct regcache *regcache)
|
||||
{ m_regcache = regcache; }
|
||||
void set_regcache (std::unique_ptr<struct regcache> regcache)
|
||||
{ m_regcache = std::move (regcache); }
|
||||
|
||||
void *target_data ()
|
||||
{ return m_target_data; }
|
||||
@@ -94,7 +90,7 @@ struct thread_info : public intrusive_list_node<thread_info>
|
||||
|
||||
private:
|
||||
process_info *m_process;
|
||||
struct regcache *m_regcache = nullptr;
|
||||
std::unique_ptr<struct regcache> m_regcache = nullptr;
|
||||
void *m_target_data;
|
||||
};
|
||||
|
||||
|
||||
@@ -42,8 +42,8 @@ get_thread_regcache (thread_info *thread, bool fetch)
|
||||
|
||||
gdb_assert (proc->tdesc != NULL);
|
||||
|
||||
regcache = new struct regcache (proc->tdesc);
|
||||
thread->set_regcache (regcache);
|
||||
thread->set_regcache (std::make_unique<struct regcache> (proc->tdesc));
|
||||
regcache = thread->regcache ();
|
||||
}
|
||||
|
||||
if (fetch && !regcache->registers_fetched)
|
||||
@@ -236,7 +236,6 @@ free_register_cache_thread (thread_info *thread)
|
||||
if (regcache != NULL)
|
||||
{
|
||||
regcache_invalidate_thread (thread);
|
||||
delete regcache;
|
||||
thread->set_regcache (nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user