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

Reply via email to