[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