diff options
author | Jean-Daniel Dupas <devlists@shadowlab.org> | 2014-02-03 23:49:47 +0000 |
---|---|---|
committer | Jean-Daniel Dupas <devlists@shadowlab.org> | 2014-02-03 23:49:47 +0000 |
commit | c37277b6ca0c31c897d4b9b59fedc6ff797a6d56 (patch) | |
tree | fe7a210c9d4c55ad8c78fa06ddbc4c41e6189010 | |
parent | 89fad2f0f9dce43100b8cfcf596cae8d5c0c441b (diff) |
Fix UnwindAssembly memory leak by defining and using a shared UnwindAssemblySP type.
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@200725 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/lldb/Symbol/FuncUnwinders.h | 4 | ||||
-rw-r--r-- | include/lldb/Symbol/UnwindTable.h | 2 | ||||
-rw-r--r-- | include/lldb/Target/UnwindAssembly.h | 3 | ||||
-rw-r--r-- | include/lldb/lldb-forward.h | 1 | ||||
-rw-r--r-- | source/Symbol/FuncUnwinders.cpp | 2 | ||||
-rw-r--r-- | source/Target/UnwindAssembly.cpp | 6 |
6 files changed, 10 insertions, 8 deletions
diff --git a/include/lldb/Symbol/FuncUnwinders.h b/include/lldb/Symbol/FuncUnwinders.h index fa48dc27e..7af063402 100644 --- a/include/lldb/Symbol/FuncUnwinders.h +++ b/include/lldb/Symbol/FuncUnwinders.h @@ -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; diff --git a/include/lldb/Symbol/UnwindTable.h b/include/lldb/Symbol/UnwindTable.h index cefb91eb3..3a99eb463 100644 --- a/include/lldb/Symbol/UnwindTable.h +++ b/include/lldb/Symbol/UnwindTable.h @@ -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; diff --git a/include/lldb/Target/UnwindAssembly.h b/include/lldb/Target/UnwindAssembly.h index 6a4ae0c30..254382ac0 100644 --- a/include/lldb/Target/UnwindAssembly.h +++ b/include/lldb/Target/UnwindAssembly.h @@ -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 diff --git a/include/lldb/lldb-forward.h b/include/lldb/lldb-forward.h index ef06bf35e..43e589e39 100644 --- a/include/lldb/lldb-forward.h +++ b/include/lldb/lldb-forward.h @@ -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; diff --git a/source/Symbol/FuncUnwinders.cpp b/source/Symbol/FuncUnwinders.cpp index 68b05ade4..134dbf5f5 100644 --- a/source/Symbol/FuncUnwinders.cpp +++ b/source/Symbol/FuncUnwinders.cpp @@ -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), diff --git a/source/Target/UnwindAssembly.cpp b/source/Target/UnwindAssembly.cpp index 72137501f..af7f86fe4 100644 --- a/source/Target/UnwindAssembly.cpp +++ b/source/Target/UnwindAssembly.cpp @@ -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; } |