[Lldb-commits] [lldb] [lldb][plugin] Clear in same thread as set (PR #139252)
Jacques Pienaar via lldb-commits
lldb-commits at lists.llvm.org
Mon May 12 06:07:37 PDT 2025
jpienaar wrote:
I agree a condition variable would work here. I realized this later too (wanted all destroyed at end), one could do that as follows too
// In ManualDWARFIndex
...
std::vector<DWARFUnit::ScopedExtractDIEs> clear_cu_dies;
clear_cu_dies.reserve(units_to_index.size());
for (auto &unit : units_to_index) clear_cu_dies.push_back(*unit);
for_each_unit([&clear_cu_dies](size_t, size_t idx, DWARFUnit*) {
clear_cu_dies[idx].Extract();
});
...
// in DWARFUnit.cpp
void DWARFUnit::ScopedExtractDIEs::Extract() {
{
llvm::sys::ScopedReader lock(m_cu->m_die_array_mutex);
if (!m_cu->m_die_array.empty())
return; // Already parsed
}
llvm::sys::ScopedWriter lock(m_cu->m_die_array_mutex);
if (!m_cu->m_die_array.empty())
return; // Already parsed
// Otherwise m_die_array would be already populated.
lldbassert(!m_cu->m_cancel_scopes);
m_cu->ExtractDIEsRWLocked();
m_clear_dies = true;
}
DWARFUnit::ScopedExtractDIEs DWARFUnit::ExtractDIEsScoped() {
ScopedExtractDIEs scoped(*this);
scoped.Extract();
return scoped;
}
---
But if plain counter preferred, will switch to that.
https://github.com/llvm/llvm-project/pull/139252
More information about the lldb-commits
mailing list