forked from OSchip/llvm-project
Fix UnwindAssembly memory leak by defining and using a shared UnwindAssemblySP type.
llvm-svn: 200725
This commit is contained in:
parent
0c8bb8f0f2
commit
36b5eea258
|
@ -31,7 +31,7 @@ public:
|
|||
// instructions are finished for migrating breakpoints past the
|
||||
// stack frame setup instructions when we don't have line table information.
|
||||
|
||||
FuncUnwinders (lldb_private::UnwindTable& unwind_table, lldb_private::UnwindAssembly *assembly_profiler, AddressRange range);
|
||||
FuncUnwinders (lldb_private::UnwindTable& unwind_table, const lldb::UnwindAssemblySP& assembly_profiler, AddressRange range);
|
||||
|
||||
~FuncUnwinders ();
|
||||
|
||||
|
@ -77,7 +77,7 @@ public:
|
|||
|
||||
private:
|
||||
UnwindTable& m_unwind_table;
|
||||
UnwindAssembly *m_assembly_profiler;
|
||||
lldb::UnwindAssemblySP m_assembly_profiler;
|
||||
AddressRange m_range;
|
||||
|
||||
Mutex m_mutex;
|
||||
|
|
|
@ -57,7 +57,7 @@ private:
|
|||
|
||||
bool m_initialized; // delay some initialization until ObjectFile is set up
|
||||
|
||||
UnwindAssembly* m_assembly_profiler;
|
||||
lldb::UnwindAssemblySP m_assembly_profiler;
|
||||
|
||||
DWARFCallFrameInfo* m_eh_frame;
|
||||
|
||||
|
|
|
@ -17,10 +17,11 @@
|
|||
namespace lldb_private {
|
||||
|
||||
class UnwindAssembly :
|
||||
public std::enable_shared_from_this<UnwindAssembly>,
|
||||
public PluginInterface
|
||||
{
|
||||
public:
|
||||
static UnwindAssembly*
|
||||
static lldb::UnwindAssemblySP
|
||||
FindPlugin (const ArchSpec &arch);
|
||||
|
||||
virtual
|
||||
|
|
|
@ -384,6 +384,7 @@ namespace lldb {
|
|||
#ifndef LLDB_DISABLE_PYTHON
|
||||
typedef std::shared_ptr<lldb_private::ScriptedSyntheticChildren> ScriptedSyntheticChildrenSP;
|
||||
#endif
|
||||
typedef std::shared_ptr<lldb_private::UnwindAssembly> UnwindAssemblySP;
|
||||
typedef std::shared_ptr<lldb_private::UnwindPlan> UnwindPlanSP;
|
||||
typedef lldb_private::SharingPtr<lldb_private::ValueObject> ValueObjectSP;
|
||||
typedef std::shared_ptr<lldb_private::Value> ValueSP;
|
||||
|
|
|
@ -28,7 +28,7 @@ using namespace lldb_private;
|
|||
FuncUnwinders::FuncUnwinders
|
||||
(
|
||||
UnwindTable& unwind_table,
|
||||
UnwindAssembly *assembly_profiler,
|
||||
const lldb::UnwindAssemblySP& assembly_profiler,
|
||||
AddressRange range
|
||||
) :
|
||||
m_unwind_table(unwind_table),
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
UnwindAssembly*
|
||||
UnwindAssemblySP
|
||||
UnwindAssembly::FindPlugin (const ArchSpec &arch)
|
||||
{
|
||||
UnwindAssemblyCreateInstance create_callback;
|
||||
|
@ -24,9 +24,9 @@ UnwindAssembly::FindPlugin (const ArchSpec &arch)
|
|||
(create_callback = PluginManager::GetUnwindAssemblyCreateCallbackAtIndex(idx)) != NULL;
|
||||
++idx)
|
||||
{
|
||||
std::unique_ptr<UnwindAssembly> assembly_profiler_ap (create_callback (arch));
|
||||
UnwindAssemblySP assembly_profiler_ap (create_callback (arch));
|
||||
if (assembly_profiler_ap.get ())
|
||||
return assembly_profiler_ap.release ();
|
||||
return assembly_profiler_ap;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue