[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