yuanzi created this revision. yuanzi added a reviewer: LLDB. yuanzi requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
While running heap checker on a test that uses LLDB API, the following memory leak is found: RAW: HeapChecker started... RAW: Leak check _main_ detected leaks of 34 bytes in 4 objects RAW: The 2 largest leaks: RAW: Leak of 17 bytes in 2 objects allocated from: @ 0x7fb93bd20166 NewHook() @ 0x7fb929372a73 absl::base_internal::MallocHook::InvokeNewHookSlow() @ 0x5600d1046093 __libc_malloc @ 0x7fb974529c03 xmlStrdup @ 0x7fb9744c2a0b xmlGetProp @ 0x7fb9749d9ed6 lldb_private::XMLNode::GetAttributeValue() @ 0x7fb979043001 std::__u::__function::__policy_invoker<>::__call_impl<>() @ 0x7fb9749da06d lldb_private::XMLNode::ForEachChildElement() @ 0x7fb97903c54d lldb_private::process_gdb_remote::ProcessGDBRemote::GetGDBServerRegisterInfoXMLAndProcess() @ 0x7fb97902cfe4 lldb_private::process_gdb_remote::ProcessGDBRemote::GetGDBServerRegisterInfo() @ 0x7fb97902c1d0 lldb_private::process_gdb_remote::ProcessGDBRemote::BuildDynamicRegisterInfo() @ 0x7fb97902e92a lldb_private::process_gdb_remote::ProcessGDBRemote::SetThreadStopInfo() @ 0x7fb97902db18 lldb_private::process_gdb_remote::ProcessGDBRemote::DoConnectRemote() @ 0x7fb97584965e lldb_private::Process::ConnectRemote() @ 0x7fb975839fa6 lldb_private::Platform::DoConnectProcess() @ 0x7fb97583a39e lldb_private::Platform::ConnectProcessSynchronous() @ 0x7fb97545b28b CommandObjectProcessConnect::DoExecute() @ 0x7fb9755a70c9 lldb_private::CommandObjectParsed::Execute() @ 0x7fb97559c0e9 lldb_private::CommandInterpreter::HandleCommand() @ 0x7fb975460145 lldb_private::CommandObjectRegexCommand::DoExecute() @ 0x7fb9755a72d2 lldb_private::CommandObjectRaw::Execute() @ 0x7fb97559c0e9 lldb_private::CommandInterpreter::HandleCommand() @ 0x7fb997a5f22e lldb::SBCommandInterpreter::HandleCommand() @ 0x7fb997a5ef9b lldb::SBCommandInterpreter::HandleCommand() This change fixes the memory leaks by freeing memory after it is no longer in use. Tested with "ninja check-lldb". Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D116707 Files: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp =================================================================== --- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -4352,8 +4352,10 @@ node.GetElementText(target_info.osabi); } else if (name == "xi:include" || name == "include") { llvm::StringRef href = node.GetAttributeValue("href"); - if (!href.empty()) + if (!href.empty()) { target_info.includes.push_back(href.str()); + xmlFree(const_cast<char *>(href.data())); + } } else if (name == "feature") { feature_nodes.push_back(node); } else if (name == "groups") {
Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp =================================================================== --- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -4352,8 +4352,10 @@ node.GetElementText(target_info.osabi); } else if (name == "xi:include" || name == "include") { llvm::StringRef href = node.GetAttributeValue("href"); - if (!href.empty()) + if (!href.empty()) { target_info.includes.push_back(href.str()); + xmlFree(const_cast<char *>(href.data())); + } } else if (name == "feature") { feature_nodes.push_back(node); } else if (name == "groups") {
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits