vsk created this revision. vsk added reviewers: jasonmolenda, friss, jingham. Herald added a subscriber: aprantl. Herald added a project: LLDB.
DWARF-parsing methods in SymbolFileDWARF which update module state should take the module lock. Have ParseCallEdgesInFunction do this. This could explain some as-of-yet unreproducible crashes which occur in Function::GetTailCallingEdges(), in which the `m_call_edges` vector is both non-empty and contains a nullptr, which shouldn't be possible. (If this vector is non-empty, it _must_ contain a non-null unique_ptr.) This may address rdar://55622443, rdar://65119458. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D83359 Files: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -3844,6 +3844,7 @@ std::vector<std::unique_ptr<lldb_private::CallEdge>> SymbolFileDWARF::ParseCallEdgesInFunction(UserID func_id) { + std::lock_guard<std::recursive_mutex> guard(GetModuleMutex()); DWARFDIE func_die = GetDIE(func_id.GetID()); if (func_die.IsValid()) return CollectCallEdges(GetObjectFile()->GetModule(), func_die);
Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -3844,6 +3844,7 @@ std::vector<std::unique_ptr<lldb_private::CallEdge>> SymbolFileDWARF::ParseCallEdgesInFunction(UserID func_id) { + std::lock_guard<std::recursive_mutex> guard(GetModuleMutex()); DWARFDIE func_die = GetDIE(func_id.GetID()); if (func_die.IsValid()) return CollectCallEdges(GetObjectFile()->GetModule(), func_die);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits