[Lldb-commits] [lldb] r157875 - /lldb/trunk/source/Target/Process.cpp

Sean Callanan scallanan at apple.com
Fri Jun 1 18:16:20 PDT 2012


Author: spyffe
Date: Fri Jun  1 20:16:20 2012
New Revision: 157875

URL: http://llvm.org/viewvc/llvm-project?rev=157875&view=rev
Log:
Fixed a problem where detaching from a process
left a read-write lock dangling, causing crashes
in debug builds.

Modified:
    lldb/trunk/source/Target/Process.cpp

Modified: lldb/trunk/source/Target/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=157875&r1=157874&r2=157875&view=diff
==============================================================================
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Fri Jun  1 20:16:20 2012
@@ -1299,15 +1299,24 @@
     // to tell the program to run.
     if (!IsHijackedForEvent(eBroadcastBitStateChanged))
     {
-        const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
-        const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
-        if (old_state_is_stopped != new_state_is_stopped)
+        if (new_state == eStateDetached)
         {
-            if (new_state_is_stopped)
+            if (log)
+                log->Printf("Process::SetPublicState (%s) -- unlocking run lock for detach", StateAsCString(new_state));
+            m_run_lock.WriteUnlock();
+        }
+        else
+        {
+            const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
+            const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
+            if (old_state_is_stopped != new_state_is_stopped)
             {
-                if (log)
-                    log->Printf("Process::SetPublicState (%s) -- unlocking run lock", StateAsCString(new_state));
-                m_run_lock.WriteUnlock();
+                if (new_state_is_stopped)
+                {
+                    if (log)
+                        log->Printf("Process::SetPublicState (%s) -- unlocking run lock", StateAsCString(new_state));
+                    m_run_lock.WriteUnlock();
+                }
             }
         }
     }





More information about the lldb-commits mailing list