[Lldb-commits] [PATCH] D100795: [lldb] Fix RichManglingContext::FromCxxMethodName() leak
Jordan Rupprecht via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 20 13:29:34 PDT 2021
rupprecht updated this revision to Diff 338979.
rupprecht added a comment.
- Move comment about switch to the correct spot
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100795/new/
https://reviews.llvm.org/D100795
Files:
lldb/include/lldb/Core/RichManglingContext.h
lldb/source/Core/RichManglingContext.cpp
Index: lldb/source/Core/RichManglingContext.cpp
===================================================================
--- lldb/source/Core/RichManglingContext.cpp
+++ lldb/source/Core/RichManglingContext.cpp
@@ -19,7 +19,12 @@
using namespace lldb_private;
// RichManglingContext
-void RichManglingContext::ResetProvider(InfoProvider new_provider) {
+RichManglingContext::~RichManglingContext() {
+ std::free(m_ipd_buf);
+ ResetCxxMethodParser();
+}
+
+void RichManglingContext::ResetCxxMethodParser() {
// If we want to support parsers for other languages some day, we need a
// switch here to delete the correct parser type.
if (m_cxx_method_parser.hasValue()) {
@@ -27,6 +32,10 @@
delete get<CPlusPlusLanguage::MethodName>(m_cxx_method_parser);
m_cxx_method_parser.reset();
}
+}
+
+void RichManglingContext::ResetProvider(InfoProvider new_provider) {
+ ResetCxxMethodParser();
assert(new_provider != None && "Only reset to a valid provider");
m_provider = new_provider;
Index: lldb/include/lldb/Core/RichManglingContext.h
===================================================================
--- lldb/include/lldb/Core/RichManglingContext.h
+++ lldb/include/lldb/Core/RichManglingContext.h
@@ -29,7 +29,7 @@
m_ipd_buf[0] = '\0';
}
- ~RichManglingContext() { std::free(m_ipd_buf); }
+ ~RichManglingContext();
/// Use the ItaniumPartialDemangler to obtain rich mangling information from
/// the given mangled name.
@@ -86,6 +86,9 @@
/// dependency. Instead keep a llvm::Any and cast it on-access in the cpp.
llvm::Any m_cxx_method_parser;
+ /// Clean up memory when using PluginCxxLanguage
+ void ResetCxxMethodParser();
+
/// Clean up memory and set a new info provider for this instance.
void ResetProvider(InfoProvider new_provider);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100795.338979.patch
Type: text/x-patch
Size: 1809 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210420/ab6ce9b4/attachment.bin>
More information about the lldb-commits
mailing list