diff --git a/src/symbols/symbols_with_libdwarf.cpp b/src/symbols/symbols_with_libdwarf.cpp index 5095bd0..f505171 100644 --- a/src/symbols/symbols_with_libdwarf.cpp +++ b/src/symbols/symbols_with_libdwarf.cpp @@ -1038,6 +1038,9 @@ namespace libdwarf { CPPTRACE_FORCE_NO_INLINE_FOR_PROFILING std::vector resolve_frames(const std::vector& frames) { std::vector 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 lock(mutex); for(const auto& obj_entry : collate_frames(frames, trace)) { const auto& obj_name = obj_entry.first; dwarf_resolver resolver(obj_name);