clayborg added a comment.

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.

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.



================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:266-267
 TypeList *SymbolFileDWARF::GetTypeList() {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile();
----------------
This shouldn't require locking as it is just handing out a type list ivar from 
one place or another.


================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:277-278
                                TypeSet &type_set) {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   if (die) {
----------------
This is not a SymbolFile override. It shouldn't require the locking.


================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:442-443
 TypeSystem *SymbolFileDWARF::GetTypeSystemForLanguage(LanguageType language) {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile();
----------------
This shouldn't require locking as it is just handing out a type system from one 
place or another.


================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:857-858
 uint32_t SymbolFileDWARF::GetNumCompileUnits() {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   DWARFDebugInfo *info = DebugInfo();
----------------
SymbolVendor::GetNumCompileUnits() already takes the module lock for us. All 
other internal calls to this should be protected as well


================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:866-867
 CompUnitSP SymbolFileDWARF::ParseCompileUnitAtIndex(uint32_t cu_idx) {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   CompUnitSP cu_sp;
----------------
SymbolVendor already takes the module lock for us


================
Comment at: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:880-881
                                                     const DWARFDIE &die) {
+  std::lock_guard<std::recursive_mutex> guard(
+      GetObjectFile()->GetModule()->GetMutex());
   if (die.IsValid()) {
----------------
SymbolVendor requests that lead to this call should take the lock for us...


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