Lock around libdwarf calls

This commit is contained in:
Jeremy 2023-09-20 18:28:55 -04:00
parent 99790a03c3
commit 214dd1df36
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4

View File

@ -1038,6 +1038,9 @@ namespace libdwarf {
CPPTRACE_FORCE_NO_INLINE_FOR_PROFILING
std::vector<stacktrace_frame> resolve_frames(const std::vector<object_frame>& frames) {
std::vector<stacktrace_frame> trace(frames.size(), stacktrace_frame { 0, 0, UINT_LEAST32_MAX, "", "" });
static std::mutex mutex;
// Locking around all libdwarf interaction per https://github.com/davea42/libdwarf-code/discussions/184
const std::lock_guard<std::mutex> lock(mutex);
for(const auto& obj_entry : collate_frames(frames, trace)) {
const auto& obj_name = obj_entry.first;
dwarf_resolver resolver(obj_name);