JDevlieghere added a comment.

In https://reviews.llvm.org/D52543#1246877, @clayborg wrote:

> It is the SymbolVendor's job to do the locking. And in many cases it already 
> is. I stopped with inlined comments after a few comments as it would apply to 
> this entire patch.


Thanks Greg. Honestly I don't know the code well enough to be sure where we 
*need* a lock and where we can get away without. Since it's a recursive mutex I 
figured there's no harm in playing it safe. Not everything goes through the 
symbol vendor though, for example the backtrace below is the result of a 
corruption and it looks like we're calling directly into SymbolFileDWARF.

  >  1 com.apple.LLDB.framework       0x02f8dcf5 bool 
llvm::DenseMapBase<llvm::DenseMap<void*, DIERef, llvm::DenseMapInfo<void*>, 
llvm::detail::DenseMapPair<void*, DIERef> >, void*, DIERef, 
llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, DIERef> 
>::LookupBucketFor<void*>(void* const&, llvm::detail::DenseMapPair<void*, 
DIERef> const*&) const + 45
     2 com.apple.LLDB.framework       0x02f8e91e 
llvm::DenseMapBase<llvm::DenseMap<DWARFDebugInfoEntry const*, clang::Decl*, 
llvm::DenseMapInfo<DWARFDebugInfoEntry const*>, 
llvm::detail::DenseMapPair<DWARFDebugInfoEntry const*, clang::Decl*> >, 
DWARFDebugInfoEntry const*, clang::Decl*, 
llvm::DenseMapInfo<DWARFDebugInfoEntry const*>, 
llvm::detail::DenseMapPair<DWARFDebugInfoEntry const*, clang::Decl*> 
>::FindAndConstruct(DWARFDebugInfoEntry const*&&) + 28
     3 com.apple.LLDB.framework       0x02f81f94 
DWARFASTParserClang::ParseTypeFromDWARF(lldb_private::SymbolContext const&, 
DWARFDIE const&, lldb_private::Log*, bool*) + 6144
     4 com.apple.LLDB.framework       0x03150f75 
SymbolFileDWARF::ParseType(lldb_private::SymbolContext const&, DWARFDIE const&, 
bool*) + 209
     5 com.apple.LLDB.framework       0x0314a70e 
SymbolFileDWARF::GetTypeForDIE(DWARFDIE const&, bool) + 486
     6 com.apple.LLDB.framework       0x03149ee2 
SymbolFileDWARF::ResolveType(DWARFDIE const&, bool, bool) + 68
     7 com.apple.LLDB.framework       0x02f88728 
DWARFASTParserClang::GetClangDeclContextForDIE(DWARFDIE const&) + 176
     8 com.apple.LLDB.framework       0x02f8c0ae 
DWARFASTParserClang::GetDeclContextForUIDFromDWARF(DWARFDIE const&) + 24
     9 com.apple.LLDB.framework       0x031636fe DWARFDIE::GetDeclContext() 
const + 60
    10 com.apple.LLDB.framework       0x03149dd5 
SymbolFileDWARF::GetDeclContextForUID(unsigned long long) + 53
    11 com.apple.LLDB.framework       0x0315c6ed 
SymbolFileDWARFDebugMap::GetDeclContextForUID(u



> It would be great if we can replace all of the locations where you added lock 
> guards with lldbasserts to assert that the lock is already taken. Then we 
> might be able to catch places where the locks are not being respected. But in 
> general the symbol vendor should take the lock, use N number of SymbolFile 
> instances to complete the request, and then release the lock. Makes things 
> easier on the lldb_private::SymbolFile subclasses this way.

That sounds like a really good idea, I'll definitely do that.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D52543



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to