[lldb-dev] Locking issues on windows

Carlo Kok ck at remobjects.com
Wed Apr 17 10:54:43 PDT 2013


Op 17-4-2013 19:34, Malea, Daniel schreef:
> Carlo, awesome work!
>
> Are your fixes on the Windows branch? If not, could you provide a patch
> with your changes? I'd love to try them out to see if it fixes the hangs
> in question on Linux. Multiple people seem affected by the problem.
>

They are on the windows branch but part of the same commit. I can 
extract them though. All in process, note: not a proper patch but the 
line info should be good, had to manually edit it:

Index: C:/Projects/oxygene-nougat-llvm/lldb/source/Target/Process.cpp
===================================================================
--- C:/Projects/oxygene-nougat-llvm/lldb/source/Target/Process.cpp 
(revision 171849)
+++ C:/Projects/oxygene-nougat-llvm/lldb/source/Target/Process.cpp 
(revision 179679)
@@ -962,14 +1023,18 @@
      m_allocated_memory_cache (*this),
      m_should_detach (false),
      m_next_event_action_ap(),
      m_public_run_lock (),
      m_private_run_lock (),
      m_currently_handling_event(false),
      m_finalize_called(false),
      m_last_broadcast_state (eStateInvalid),
      m_destroy_in_process (false),
      m_can_jit(eCanJITDontKnow)
  {
      CheckInWithManager ();
+	m_private_run_lock.WriteLock();

      Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
      if (log)
          log->Printf ("%p Process::Process()", this);

@@ -1079,6 +1144,8 @@
      // contain events that have ProcessSP values in them which can 
keep this
      // process around forever. These events need to be cleared out.
      m_private_state_listener.Clear();
-    m_public_run_lock.WriteUnlock();
+    //m_public_run_lock.WriteUnlock();
      m_private_run_lock.WriteUnlock();
      m_finalize_called = true;
  }

@@ -3858,27 +4071,36 @@ // give or take
-        if (m_process_sp->GetPrivateState() != eStateRunning)
+		lldb::StateType state = m_process_sp->GetPrivateState();
+		if (state != eStateRunning && state != eStateCrashed && state != 
eStateDetached && state != eStateExited)
          {
              if (!still_should_stop)
              {







More information about the lldb-dev mailing list