diff options
author | Sean Callanan <scallanan@apple.com> | 2012-07-12 01:11:40 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2012-07-12 01:11:40 +0000 |
commit | 7d69f12e75cf1816964f6e51d7d7400c99d0be99 (patch) | |
tree | 41205084b88657183d82fd2a656744d6d28c8d91 | |
parent | d2aabd3bb2c8114bc143176a6e30a7e6d2b6d746 (diff) | |
download | bcm5719-llvm-7d69f12e75cf1816964f6e51d7d7400c99d0be99.tar.gz bcm5719-llvm-7d69f12e75cf1816964f6e51d7d7400c99d0be99.zip |
Added a mutex to the call frame info to guard
generation of the FDE index.
<rdar://problem/11813705>
llvm-svn: 160099
-rw-r--r-- | lldb/include/lldb/Symbol/DWARFCallFrameInfo.h | 2 | ||||
-rw-r--r-- | lldb/source/Symbol/DWARFCallFrameInfo.cpp | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/lldb/include/lldb/Symbol/DWARFCallFrameInfo.h b/lldb/include/lldb/Symbol/DWARFCallFrameInfo.h index 75a9f19f62c..c878ea91245 100644 --- a/lldb/include/lldb/Symbol/DWARFCallFrameInfo.h +++ b/lldb/include/lldb/Symbol/DWARFCallFrameInfo.h @@ -18,6 +18,7 @@ #include "lldb/Core/AddressRange.h" #include "lldb/Core/VMRange.h" #include "lldb/Core/dwarf.h" +#include "lldb/Host/Mutex.h" #include "lldb/Symbol/UnwindPlan.h" #include "lldb/Symbol/ObjectFile.h" @@ -128,6 +129,7 @@ private: std::vector<FDEEntry> m_fde_index; bool m_fde_index_initialized; // only scan the section for FDEs once + Mutex m_fde_index_mutex; // and isolate the thread that does it bool m_is_eh_frame; diff --git a/lldb/source/Symbol/DWARFCallFrameInfo.cpp b/lldb/source/Symbol/DWARFCallFrameInfo.cpp index b8e8cde7151..edc6d151f04 100644 --- a/lldb/source/Symbol/DWARFCallFrameInfo.cpp +++ b/lldb/source/Symbol/DWARFCallFrameInfo.cpp @@ -293,9 +293,14 @@ DWARFCallFrameInfo::GetFDEIndex () { if (m_section_sp.get() == NULL || m_section_sp->IsEncrypted()) return; + if (m_fde_index_initialized) return; - + + Mutex::Locker locker(m_fde_index_mutex); + + if (m_fde_index_initialized) // if two threads hit the locker + return; dw_offset_t offset = 0; if (m_cfi_data_initialized == false) |