[Lldb-commits] [lldb] Convert the StackFrameList mutex to a shared mutex. (PR #117252)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Fri Nov 22 00:40:22 PST 2024
================
@@ -771,24 +809,38 @@ void StackFrameList::SelectMostRelevantFrame() {
LLDB_LOG(log, "No relevant frame!");
}
-uint32_t StackFrameList::GetSelectedFrameIndex(
- SelectMostRelevant select_most_relevant) {
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
+uint32_t
+StackFrameList::GetSelectedFrameIndex(SelectMostRelevant select_most_relevant) {
if (!m_selected_frame_idx && select_most_relevant)
SelectMostRelevantFrame();
- if (!m_selected_frame_idx) {
- // If we aren't selecting the most relevant frame, and the selected frame
- // isn't set, then don't force a selection here, just return 0.
- if (!select_most_relevant)
- return 0;
- // If the inlined stack frame is set, then use that:
- m_selected_frame_idx = 0;
+ { // Scope for lock guard
+ std::shared_lock<std::shared_mutex> guard(m_list_mutex);
+ if (!m_selected_frame_idx) {
+ // If we aren't selecting the most relevant frame, and the selected frame
+ // isn't set, then don't force a selection here, just return 0.
+ if (!select_most_relevant)
+ return 0;
+ // If the inlined stack frame is set, then use that:
+ m_selected_frame_idx = 0;
+ }
+ return *m_selected_frame_idx;
}
- return *m_selected_frame_idx;
}
uint32_t StackFrameList::SetSelectedFrame(lldb_private::StackFrame *frame) {
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
+ uint32_t result = 0;
+ {
+ std::shared_lock<std::shared_mutex> guard(m_list_mutex);
+ result = SetSelectedFrameNoLock(frame);
----------------
labath wrote:
A shared lock around a function called "Set" is very suspicious. What is this trying to protect?
https://github.com/llvm/llvm-project/pull/117252
More information about the lldb-commits
mailing list