[Lldb-commits] [lldb] r332200 - Revert "Protect DWARFCompileUnit::m_die_array by a new mutex"

Jan Kratochvil via lldb-commits lldb-commits at lists.llvm.org
Sun May 13 11:38:28 PDT 2018


Author: jankratochvil
Date: Sun May 13 11:38:28 2018
New Revision: 332200

URL: http://llvm.org/viewvc/llvm-project?rev=332200&view=rev
Log:
Revert "Protect DWARFCompileUnit::m_die_array by a new mutex"

Pavel Labath found this patch is incomplete and racy.  I think there needs to
be some more mutexes even before considering DW_TAG_partial_unit.

This reverts commit 331229 which was: https://reviews.llvm.org/D40470

Modified:
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp?rev=332200&r1=332199&r2=332200&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp Sun May 13 11:38:28 2018
@@ -41,20 +41,9 @@ DWARFUnit::~DWARFUnit() {}
 // Parses a compile unit and indexes its DIEs if it hasn't already been done.
 //----------------------------------------------------------------------
 size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) {
-  size_t initial_die_array_size;
-  auto already_parsed = [cu_die_only, &initial_die_array_size, this]() -> bool {
-    initial_die_array_size = m_die_array.size();
-    return (cu_die_only && initial_die_array_size > 0)
-        || initial_die_array_size > 1;
-  };
-  {
-    llvm::sys::ScopedReader lock(m_extractdies_mutex);
-    if (already_parsed())
-      return 0;
-  }
-  llvm::sys::ScopedWriter lock(m_extractdies_mutex);
-  if (already_parsed())
-    return 0;
+  const size_t initial_die_array_size = m_die_array.size();
+  if ((cu_die_only && initial_die_array_size > 0) || initial_die_array_size > 1)
+    return 0; // Already parsed
 
   static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
   Timer scoped_timer(
@@ -302,8 +291,6 @@ void DWARFUnit::SetAddrBase(dw_addr_t ad
 
 void DWARFUnit::ClearDIEs(bool keep_compile_unit_die) {
   if (m_die_array.size() > 1) {
-    llvm::sys::ScopedWriter lock(m_extractdies_mutex);
-
     // std::vectors never get any smaller when resized to a smaller size, or
     // when clear() or erase() are called, the size will report that it is
     // smaller, but the memory allocated remains intact (call capacity() to see

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h?rev=332200&r1=332199&r2=332200&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFUnit.h Sun May 13 11:38:28 2018
@@ -13,7 +13,6 @@
 #include "DWARFDIE.h"
 #include "DWARFDebugInfoEntry.h"
 #include "lldb/lldb-enumerations.h"
-#include "llvm/Support/RWMutex.h"
 
 class DWARFUnit;
 class DWARFCompileUnit;
@@ -190,7 +189,6 @@ protected:
   // If this is a dwo compile unit this is the offset of the base compile unit
   // in the main object file
   dw_offset_t m_base_obj_offset = DW_INVALID_OFFSET;
-  llvm::sys::RWMutex m_extractdies_mutex;
 
   static void
   IndexPrivate(DWARFUnit *dwarf_cu, const lldb::LanguageType cu_language,




More information about the lldb-commits mailing list