================
@@ -675,19 +682,24 @@ StackFrameSP StackFrameList::GetFrameWithStackID(const 
StackID &stack_id) {
   StackFrameSP frame_sp;
 
   if (stack_id.IsValid()) {
-    std::lock_guard<std::recursive_mutex> guard(m_mutex);
     uint32_t frame_idx = 0;
-    // Do a binary search in case the stack frame is already in our cache
-    collection::const_iterator begin = m_frames.begin();
-    collection::const_iterator end = m_frames.end();
-    if (begin != end) {
-      collection::const_iterator pos =
-          std::lower_bound(begin, end, stack_id, CompareStackID);
-      if (pos != end) {
-        if ((*pos)->GetStackID() == stack_id)
-          return *pos;
+    {
+      // First see if the frame is already realized.  This is the scope for
+      // the shared mutex:
+      std::shared_lock<std::shared_mutex> guard(m_list_mutex);
+      // Do a binary search in case the stack frame is already in our cache
+      collection::const_iterator begin = m_frames.begin();
+      collection::const_iterator end = m_frames.end();
+      if (begin != end) {
+        collection::const_iterator pos =
+            std::lower_bound(begin, end, stack_id, CompareStackID);
+        if (pos != end) {
+          if ((*pos)->GetStackID() == stack_id)
+            return *pos;
+        }
----------------
labath wrote:

```suggestion
      collection::const_iterator pos =
            llvm::lower_bound(m_frames, CompareStackID);
      if (pos != m_frames.end() && (*pos)->GetStackID() == stack_id)
          return *pos;   
```

Optional, but would be a nice way to compensate for the increase in the nesting 
level.

https://github.com/llvm/llvm-project/pull/117252
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to