Hmm, based on the stack trace you provided, it seems that m_unwind_mutex should be initialized as a recursive mutex, just like Process::m_thread_mutex.
Can you try to change the initialization of m_unwind_mutex in Unwind.h to match that of Process:m_thread_mutex, and see if it helps? If not, then it means some other thread is holding that mutex and more investigation is required… Cheers, Dan From: Félix Cloutier <[email protected]<mailto:[email protected]>> Date: Thursday, 22 August, 2013 4:26 PM To: "[email protected]<mailto:[email protected]>" <[email protected]<mailto:[email protected]>> Subject: [lldb-dev] LLDB deadlocks trying to unwind LLDB, connected to a stub I'm building, is trying to produce a stack trace of my stopped program but deadlocks instead: #0 __psynch_mutexwait () #1 pthread_mutex_lock () #2 lldb_private::Mutex::Lock() at lldb/source/Host/common/Mutex.cpp:281 #3 lldb_private::Mutex::Locker::Lock(lldb_private::Mutex&) at lldb/source/Host/common/Mutex.cpp:152 #4 lldb_private::Mutex::Locker::Locker(lldb_private::Mutex&) at lldb/source/Host/common/Mutex.cpp:112 #5 lldb_private::Mutex::Locker::Locker(lldb_private::Mutex&) at lldb/source/Host/common/Mutex.cpp:113 #6 lldb_private::Unwind::GetFrameCount() at lldb/include/lldb/Target/Unwind.h:51 #7 UnwindMacOSXFrameBackchain::DoGetFrameInfoAtIndex(unsigned int, unsigned long long&, unsigned long long&) at lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp:59 #8 lldb_private::Unwind::GetFrameInfoAtIndex(unsigned int, unsigned long long&, unsigned long long&) at lldb/include/lldb/Target/Unwind.h:78 #9 lldb_private::StackFrameList::GetFramesUpTo(unsigned int) at lldb/source/Target/StackFrameList.cpp:304 #10 lldb_private::StackFrameList::ResetCurrentInlinedDepth() at lldb/source/Target/StackFrameList.cpp:110 #11 lldb_private::StackFrameList::CalculateCurrentInlinedDepth() at lldb/source/Target/StackFrameList.cpp:79 #12 lldb_private::Thread::ShouldStop(lldb_private::Event*) at lldb/source/Target/Thread.cpp:752 #13 lldb_private::ThreadList::ShouldStop(lldb_private::Event*) at lldb/source/Target/ThreadList.cpp:298 #14 lldb_private::Process::ShouldBroadcastEvent(lldb_private::Event*) at lldb/source/Target/Process.cpp:3707 #15 lldb_private::Process::HandlePrivateEvent(std::__1::shared_ptr<lldb_private::Event>&) at lldb/source/Target/Process.cpp:3936 #16 lldb_private::Process::ConnectRemote(lldb_private::Stream*, char const*) at lldb/source/Target/Process.cpp:3257 #17 CommandObjectProcessConnect::DoExecute(lldb_private::Args&, lldb_private::CommandReturnObject&) at lldb/source/Commands/CommandObjectProcess.cpp:1173 #18 lldb_private::CommandObjectParsed::Execute(char const*, lldb_private::CommandReturnObject&) at lldb/source/Interpreter/CommandObject.cpp:1038 #19 lldb_private::CommandInterpreter::HandleCommand(char const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, lldb_private::ExecutionContext*, bool, bool) at lldb/source/Interpreter/CommandInterpreter.cpp:1825 #20 lldb_private::CommandObjectRegexCommand::DoExecute(char const*, lldb_private::CommandReturnObject&) at lldb/source/Interpreter/CommandObjectRegexCommand.cpp:89 #21 lldb_private::CommandObjectRaw::Execute(char const*, lldb_private::CommandReturnObject&) at lldb/source/Interpreter/CommandObject.cpp:1064 #22 lldb_private::CommandInterpreter::HandleCommand(char const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, lldb_private::ExecutionContext*, bool, bool) at lldb/source/Interpreter/CommandInterpreter.cpp:1825 #23 lldb::SBCommandInterpreter::HandleCommand(char const*, lldb::SBCommandReturnObject&, bool) at lldb/source/API/SBCommandInterpreter.cpp:122 #24 Driver::HandleIOEvent(lldb::SBEvent const&) at lldb/tools/driver/Driver.cpp:1083 #25 Driver::MainLoop() at lldb/tools/driver/Driver.cpp:1556 #26 main at lldb/tools/driver/Driver.cpp:1727 #27 start () #8 locks m_unwind_mutex and #6 tries to do the same thing. The code path is unconditional (calling GetFrameInfoAtIndex with a UnwindMacOSXFrameBackchain can only end in a deadlock, from what I can see), so I'm not sure how I can prevent this from happening. Félix _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
