[Lldb-commits] m_private_run_lock relying on undefined pthread behaviour

Ed Maste emaste at freebsd.org
Fri Jun 21 10:03:30 PDT 2013

On 18 June 2013 18:45, Greg Clayton <gclayton at apple.com> wrote:
> Yes we do rely upon being able to lock on one thread and unlock on another. Good catch, let us know what you come up with.

For now I have just hacked my thread library to avoid returning EPERM
for this case to move farther along, and will ponder a solution for
this.  Any objection to the following change for now, to abort instead
of deadlocking in this case?

diff --git a/source/Target/Process.cpp b/source/Target/Process.cpp
index c6945dc..059955e 100644
--- a/source/Target/Process.cpp
+++ b/source/Target/Process.cpp
@@ -1715,10 +1715,12 @@ Process::SetPrivateState (StateType new_state)
     const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
     if (old_state_is_stopped != new_state_is_stopped)
+        bool rv;
         if (new_state_is_stopped)
-            m_private_run_lock.WriteUnlock();
+            rv = m_private_run_lock.WriteUnlock();
-            m_private_run_lock.WriteLock();
+            rv = m_private_run_lock.WriteLock();
+        assert(rv);

     if (state_changed)

More information about the lldb-commits mailing list