Fix UnwindAssembly memory leak by defining and using a shared UnwindAssemblySP type.

llvm-svn: 200725
This commit is contained in:
Jean-Daniel Dupas 2014-02-03 23:49:47 +00:00
parent 0c8bb8f0f2
commit 36b5eea258
6 changed files with 10 additions and 8 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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),

View File

@ -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;
}