[lldb-dev] Process::SyncIOHandler(), everyone please try out the following patch
Ryan Brown
ribrdb at google.com
Thu May 14 16:59:44 PDT 2015
I just built lldb with tsan. The tests don't seem to work because python
can't find tsan, but a quick debugging session found a few issues:
WARNING: ThreadSanitizer: data race (pid=64299)
Write of size 1 at 0x7d4400004bb0 by thread T6:
#0 lldb_private::IOHandler::SetIsDone(bool)
tools/lldb/include/lldb/Core/IOHandler.h:107
#1 lldb_private::Process::PushProcessIOHandler()
tools/lldb/source/Target/Process.cpp:5279
#2
lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Target/Process.cpp:4443
#3 lldb_private::Process::RunPrivateStateThread()
tools/lldb/source/Target/Process.cpp:4581
#4 lldb_private::Process::PrivateStateThread(void*)
tools/lldb/source/Target/Process.cpp:4505
#5 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
Previous write of size 1 at 0x7d4400004bb0 by main thread:
#0 lldb_private::IOHandler::SetIsDone(bool)
tools/lldb/include/lldb/Core/IOHandler.h:107
#1 IOHandlerProcessSTDIO::Run()
tools/lldb/source/Target/Process.cpp:5096
#2 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#3 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#4 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#5 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#6 main tools/lldb/tools/driver/Driver.cpp:1252
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock)
(pid=64299)
Cycle in lock order graph: M31728 (0x7d1000019e58) => M564
(0x7d680001d0f8) => M31728
Mutex M564 acquired here while holding mutex M31728 in main thread:
#3 Locker tools/lldb/source/Host/common/Mutex.cpp:114
#4
lldb_private::ModuleList::FindSymbolsWithNameAndType(lldb_private::ConstString
const&, lldb::SymbolType, lldb_private::SymbolContextList&, bool) const
tools/lldb/source/Core/ModuleList.cpp:565
#5 JITLoaderGDB::GetSymbolAddress(lldb_private::ModuleList&,
lldb_private::ConstString const&, lldb::SymbolType) const
tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:432
#6 JITLoaderGDB::SetJITBreakpoint(lldb_private::ModuleList&)
tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:109
#7 JITLoaderGDB::DidLaunch()
tools/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp:84
#8 lldb_private::JITLoaderList::DidLaunch()
tools/lldb/source/Target/JITLoaderList.cpp:60
#9 lldb_private::Process::Launch(lldb_private::ProcessLaunchInfo&)
tools/lldb/source/Target/Process.cpp:3177
#10
lldb_private::platform_linux::PlatformLinux::DebugProcess(lldb_private::ProcessLaunchInfo&,
lldb_private::Debugger&, lldb_private::Target*, lldb_private::Error&)
tools/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp:805
#11 lldb_private::Target::Launch(lldb_private::ProcessLaunchInfo&,
lldb_private::Stream*) tools/lldb/source/Target/Target.cpp:2602
#12 CommandObjectProcessLaunch::DoExecute(lldb_private::Args&,
lldb_private::CommandReturnObject&)
tools/lldb/source/Commands/CommandObjectProcess.cpp:263
#13 lldb_private::CommandObjectParsed::Execute(char const*,
lldb_private::CommandReturnObject&)
tools/lldb/source/Interpreter/CommandObject.cpp:1075
#14 lldb_private::CommandInterpreter::HandleCommand(char const*,
lldb_private::LazyBool, lldb_private::CommandReturnObject&,
lldb_private::ExecutionContext*, bool, bool)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:1812
#15
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997
#16 non-virtual thunk to
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076
#17 lldb_private::IOHandlerEditline::Run()
tools/lldb/source/Core/IOHandler.cpp:729
#18 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#19 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#20 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#21 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#22 main tools/lldb/tools/driver/Driver.cpp:1252
Mutex M31728 previously acquired by the same thread here:
#3 Locker tools/lldb/source/Host/common/Mutex.cpp:114
#4 lldb_private::JITLoaderList::DidLaunch()
tools/lldb/source/Target/JITLoaderList.cpp:58
#5 lldb_private::Process::Launch(lldb_private::ProcessLaunchInfo&)
tools/lldb/source/Target/Process.cpp:3177
#6
lldb_private::platform_linux::PlatformLinux::DebugProcess(lldb_private::ProcessLaunchInfo&,
lldb_private::Debugger&, lldb_private::Target*, lldb_private::Error&)
tools/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp:805
#7 lldb_private::Target::Launch(lldb_private::ProcessLaunchInfo&,
lldb_private::Stream*) tools/lldb/source/Target/Target.cpp:2602
#8 CommandObjectProcessLaunch::DoExecute(lldb_private::Args&,
lldb_private::CommandReturnObject&)
tools/lldb/source/Commands/CommandObjectProcess.cpp:263
#9 lldb_private::CommandObjectParsed::Execute(char const*,
lldb_private::CommandReturnObject&)
tools/lldb/source/Interpreter/CommandObject.cpp:1075
#10 lldb_private::CommandInterpreter::HandleCommand(char const*,
lldb_private::LazyBool, lldb_private::CommandReturnObject&,
lldb_private::ExecutionContext*, bool, bool)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:1812
#11
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997
#12 non-virtual thunk to
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076
#13 lldb_private::IOHandlerEditline::Run()
tools/lldb/source/Core/IOHandler.cpp:729
#14 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#15 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#16 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#17 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#18 main tools/lldb/tools/driver/Driver.cpp:1252
Mutex M31728 acquired here while holding mutex M564 in thread T6:
#3 Locker tools/lldb/source/Host/common/Mutex.cpp:114
#4
lldb_private::JITLoaderList::ModulesDidLoad(lldb_private::ModuleList&)
tools/lldb/source/Target/JITLoaderList.cpp:74
#5 lldb_private::Process::ModulesDidLoad(lldb_private::ModuleList&)
tools/lldb/source/Target/Process.cpp:6466
#6 lldb_private::Target::ModulesDidLoad(lldb_private::ModuleList&)
tools/lldb/source/Target/Target.cpp:1286
#7 lldb_private::Target::ModuleAdded(lldb_private::ModuleList const&,
std::shared_ptr<lldb_private::Module> const&)
tools/lldb/source/Target/Target.cpp:1254
#8 non-virtual thunk to
lldb_private::Target::ModuleAdded(lldb_private::ModuleList const&,
std::shared_ptr<lldb_private::Module> const&)
tools/lldb/source/Target/Target.cpp:1256
#9
lldb_private::ModuleList::AppendImpl(std::shared_ptr<lldb_private::Module>
const&, bool) tools/lldb/source/Core/ModuleList.cpp:111
#10
lldb_private::ModuleList::Append(std::shared_ptr<lldb_private::Module>
const&) tools/lldb/source/Core/ModuleList.cpp:118
#11 lldb_private::Target::GetSharedModule(lldb_private::ModuleSpec
const&, lldb_private::Error*) tools/lldb/source/Target/Target.cpp:1810
#12
lldb_private::DynamicLoader::LoadModuleAtAddress(lldb_private::FileSpec
const&, unsigned long, unsigned long)
tools/lldb/source/Core/DynamicLoader.cpp:185
#13 DynamicLoaderPOSIXDYLD::LoadAllCurrentModules()
tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:530
#14 DynamicLoaderPOSIXDYLD::EntryBreakpointHit(void*,
lldb_private::StoppointCallbackContext*, unsigned long, unsigned long)
tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:343
#15
lldb_private::BreakpointOptions::InvokeCallback(lldb_private::StoppointCallbackContext*,
unsigned long, unsigned long)
tools/lldb/source/Breakpoint/BreakpointOptions.cpp:147
#16
lldb_private::Breakpoint::InvokeCallback(lldb_private::StoppointCallbackContext*,
int) tools/lldb/source/Breakpoint/Breakpoint.cpp:345
#17
lldb_private::BreakpointLocation::InvokeCallback(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocation.cpp:222
#18
lldb_private::BreakpointLocation::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocation.cpp:465
#19
lldb_private::BreakpointLocationCollection::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocationCollection.cpp:144
#20
lldb_private::BreakpointSite::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointSite.cpp:69
#21
lldb_private::StopInfoBreakpoint::ShouldStopSynchronous(lldb_private::Event*)
tools/lldb/source/Target/StopInfo.cpp:200
#22 lldb_private::Thread::ShouldStop(lldb_private::Event*)
tools/lldb/source/Target/Thread.cpp:845
#23 lldb_private::ThreadList::ShouldStop(lldb_private::Event*)
tools/lldb/source/Target/ThreadList.cpp:318
#24 lldb_private::Process::ShouldBroadcastEvent(lldb_private::Event*)
tools/lldb/source/Target/Process.cpp:4181
#25
lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Target/Process.cpp:4422
#26 lldb_private::Process::RunPrivateStateThread()
tools/lldb/source/Target/Process.cpp:4581
#27 lldb_private::Process::PrivateStateThread(void*)
tools/lldb/source/Target/Process.cpp:4505
#28 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
Mutex M564 previously acquired by the same thread here:
#3 Locker tools/lldb/source/Host/common/Mutex.cpp:114
#4
lldb_private::ModuleList::AppendImpl(std::shared_ptr<lldb_private::Module>
const&, bool) tools/lldb/source/Core/ModuleList.cpp:108
#5
lldb_private::ModuleList::Append(std::shared_ptr<lldb_private::Module>
const&) tools/lldb/source/Core/ModuleList.cpp:118
#6 lldb_private::Target::GetSharedModule(lldb_private::ModuleSpec
const&, lldb_private::Error*) tools/lldb/source/Target/Target.cpp:1810
#7
lldb_private::DynamicLoader::LoadModuleAtAddress(lldb_private::FileSpec
const&, unsigned long, unsigned long)
tools/lldb/source/Core/DynamicLoader.cpp:185
#8 DynamicLoaderPOSIXDYLD::LoadAllCurrentModules()
tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:530
#9 DynamicLoaderPOSIXDYLD::EntryBreakpointHit(void*,
lldb_private::StoppointCallbackContext*, unsigned long, unsigned long)
tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:343
#10
lldb_private::BreakpointOptions::InvokeCallback(lldb_private::StoppointCallbackContext*,
unsigned long, unsigned long)
tools/lldb/source/Breakpoint/BreakpointOptions.cpp:147
#11
lldb_private::Breakpoint::InvokeCallback(lldb_private::StoppointCallbackContext*,
int) tools/lldb/source/Breakpoint/Breakpoint.cpp:345
#12
lldb_private::BreakpointLocation::InvokeCallback(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocation.cpp:222
#13
lldb_private::BreakpointLocation::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocation.cpp:465
#14
lldb_private::BreakpointLocationCollection::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointLocationCollection.cpp:144
#15
lldb_private::BreakpointSite::ShouldStop(lldb_private::StoppointCallbackContext*)
tools/lldb/source/Breakpoint/BreakpointSite.cpp:69
#16
lldb_private::StopInfoBreakpoint::ShouldStopSynchronous(lldb_private::Event*)
tools/lldb/source/Target/StopInfo.cpp:200
#17 lldb_private::Thread::ShouldStop(lldb_private::Event*)
tools/lldb/source/Target/Thread.cpp:845
#18 lldb_private::ThreadList::ShouldStop(lldb_private::Event*)
tools/lldb/source/Target/ThreadList.cpp:318
#19 lldb_private::Process::ShouldBroadcastEvent(lldb_private::Event*)
tools/lldb/source/Target/Process.cpp:4181
#20
lldb_private::Process::HandlePrivateEvent(std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Target/Process.cpp:4422
#21 lldb_private::Process::RunPrivateStateThread()
tools/lldb/source/Target/Process.cpp:4581
#22 lldb_private::Process::PrivateStateThread(void*)
tools/lldb/source/Target/Process.cpp:4505
#23 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
==================
WARNING: ThreadSanitizer: data race (pid=64299)
Write of size 1 at 0x7d4400004bb1 by thread T2 (mutexes: write M168):
#0 lldb_private::IOHandler::Deactivate()
tools/lldb/include/lldb/Core/IOHandler.h:131
#1
lldb_private::Debugger::PopIOHandler(std::shared_ptr<lldb_private::IOHandler>
const&) tools/lldb/source/Core/Debugger.cpp:1064
#2 lldb_private::Process::PopProcessIOHandler()
tools/lldb/source/Target/Process.cpp:5291
#3
lldb_private::Debugger::HandleProcessEvent(std::shared_ptr<lldb_private::Event>
const&) tools/lldb/source/Core/Debugger.cpp:1544
#4 lldb_private::Debugger::DefaultEventHandler()
tools/lldb/source/Core/Debugger.cpp:1634
#5 lldb_private::Debugger::EventHandlerThread(void*)
tools/lldb/source/Core/Debugger.cpp:1696
#6 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
Previous write of size 1 at 0x7d4400004bb1 by main thread:
#0 lldb_private::IOHandler::Activate()
tools/lldb/include/lldb/Core/IOHandler.h:125
#1 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:906
#2 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#3 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#4 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#5 main tools/lldb/tools/driver/Driver.cpp:1252
==================
WARNING: ThreadSanitizer: data race (pid=64299)
Read of size 8 at 0x7da0000080c0 by thread T2 (mutexes: write M168):
#0 write <null>:0
#1 operator() tools/lldb/source/Host/posix/PipePosix.cpp:416
#2 std::_Function_handler<lldb_private::Error (bool&),
lldb_private::PipePosix::Write(void const*, unsigned long, unsigned
long&)::$_1>::_M_invoke(std::_Any_data const&, bool&)
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/functional:2056
#3 std::function<lldb_private::Error (bool&)>::operator()(bool&) const
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/functional:2464
#4 (anonymous namespace)::SelectIO(int, bool,
std::function<lldb_private::Error (bool&)> const&,
std::chrono::duration<long, std::ratio<1l, 1000000l> > const&)
tools/lldb/source/Host/posix/PipePosix.cpp:118
#5 lldb_private::PipePosix::Write(void const*, unsigned long, unsigned
long&) tools/lldb/source/Host/posix/PipePosix.cpp:411
#6 IOHandlerProcessSTDIO::Cancel()
tools/lldb/source/Target/Process.cpp:5192
#7
lldb_private::Debugger::PopIOHandler(std::shared_ptr<lldb_private::IOHandler>
const&) tools/lldb/source/Core/Debugger.cpp:1065
#8 lldb_private::Process::PopProcessIOHandler()
tools/lldb/source/Target/Process.cpp:5291
#9
lldb_private::Debugger::HandleProcessEvent(std::shared_ptr<lldb_private::Event>
const&) tools/lldb/source/Core/Debugger.cpp:1544
#10 lldb_private::Debugger::DefaultEventHandler()
tools/lldb/source/Core/Debugger.cpp:1634
#11 lldb_private::Debugger::EventHandlerThread(void*)
tools/lldb/source/Core/Debugger.cpp:1696
#12 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
Previous write of size 8 at 0x7da0000080c0 by main thread:
#0 pipe2 <null>:0
#1 lldb_private::PipePosix::CreateNew(bool)
tools/lldb/source/Host/posix/PipePosix.cpp:168
#2 IOHandlerProcessSTDIO::OpenPipes()
tools/lldb/source/Target/Process.cpp:5078
#3 IOHandlerProcessSTDIO::Run()
tools/lldb/source/Target/Process.cpp:5097
#4 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#5 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#6 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#7 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#8 main tools/lldb/tools/driver/Driver.cpp:1252
Location is file descriptor 12 created by main thread at:
#0 pipe2 <null>:0
#1 lldb_private::PipePosix::CreateNew(bool)
tools/lldb/source/Host/posix/PipePosix.cpp:168
#2 IOHandlerProcessSTDIO::OpenPipes()
tools/lldb/source/Target/Process.cpp:5078
#3 IOHandlerProcessSTDIO::Run()
tools/lldb/source/Target/Process.cpp:5097
#4 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#5 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#6 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#7 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#8 main tools/lldb/tools/driver/Driver.cpp:1252
==================
WARNING: ThreadSanitizer: data race (pid=64299)
Read of size 8 at 0x7d080001a5c8 by main thread:
#0 lldb_private::HostNativeThreadBase::GetSystemHandle() const
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:35
#1 lldb_private::HostThread::EqualsThread(unsigned long) const
tools/lldb/source/Host/common/HostThread.cpp:77
#2 lldb_private::Process::GetRunLock()
tools/lldb/source/Target/Process.cpp:6373
#3
lldb_private::ExecutionContextRef::SetTargetPtr(lldb_private::Target*,
bool) tools/lldb/source/Target/ExecutionContext.cpp:723
#4
lldb_private::CommandInterpreter::UpdateExecutionContext(lldb_private::ExecutionContext*)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:2940
#5 lldb_private::CommandInterpreter::HandleCommand(char const*,
lldb_private::LazyBool, lldb_private::CommandReturnObject&,
lldb_private::ExecutionContext*, bool, bool)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:1668
#6
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997
#7 non-virtual thunk to
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076
#8 lldb_private::IOHandlerEditline::Run()
tools/lldb/source/Core/IOHandler.cpp:729
#9 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#10 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#11 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#12 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#13 main tools/lldb/tools/driver/Driver.cpp:1252
Previous write of size 8 at 0x7d080001a5c8 by thread T6:
#0 memset <null>:0
#1 lldb_private::HostNativeThreadBase::Reset()
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:54
#2 lldb_private::HostThread::Reset()
tools/lldb/source/Host/common/HostThread.cpp:41
#3 lldb_private::Process::RunPrivateStateThread()
tools/lldb/source/Target/Process.cpp:4604
#4 lldb_private::Process::PrivateStateThread(void*)
tools/lldb/source/Target/Process.cpp:4505
#5 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
==================
WARNING: ThreadSanitizer: data race (pid=64299)
Write of size 4 at 0x7d680001c8e8 by main thread:
#0 lldb_private::Terminal::SetFileDescriptor(int)
tools/lldb/include/lldb/Host/Terminal.h:46
#1 lldb_private::TerminalState::Save(int, bool)
tools/lldb/source/Host/common/Terminal.cpp:144
#2 lldb_private::Debugger::SaveInputTerminalState()
tools/lldb/source/Core/Debugger.cpp:825
#3 lldb::SBDebugger::SaveInputTerminalState()
tools/lldb/source/API/SBDebugger.cpp:395
#4 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203
#5 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, int,
my_siginfo_t*, void*) tsan_interceptors.o:0
#6 std::string::_Rep::_M_dispose(std::allocator<char> const&)
/build/buildd/gcc-4.8-4.8.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/basic_string.h:538
#7
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997
#8 non-virtual thunk to
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076
#9 lldb_private::IOHandlerEditline::Run()
tools/lldb/source/Core/IOHandler.cpp:729
#10 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#11 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#12 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#13 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#14 main tools/lldb/tools/driver/Driver.cpp:1252
Previous write of size 4 at 0x7d680001c8e8 by thread T2 (mutexes: write
M159):
#0 lldb_private::Terminal::SetFileDescriptor(int)
tools/lldb/include/lldb/Host/Terminal.h:46
#1 lldb_private::TerminalState::Save(int, bool)
tools/lldb/source/Host/common/Terminal.cpp:144
#2 lldb_private::Debugger::SaveInputTerminalState()
tools/lldb/source/Core/Debugger.cpp:825
#3 lldb::SBDebugger::SaveInputTerminalState()
tools/lldb/source/API/SBDebugger.cpp:395
#4 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203
#5 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, int,
my_siginfo_t*, void*) tsan_interceptors.o:0
#6 lldb_private::Condition::Wait(lldb_private::Mutex&,
lldb_private::TimeValue const*, bool*)
tools/lldb/source/Host/common/Condition.cpp:85
#7 lldb_private::Predicate<bool>::WaitForValueEqualTo(bool,
lldb_private::TimeValue const*, bool*)
tools/lldb/include/lldb/Host/Predicate.h:339
#8
lldb_private::Listener::WaitForEventsInternal(lldb_private::TimeValue
const*, lldb_private::Broadcaster*, lldb_private::ConstString const*,
unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Core/Listener.cpp:442
#9 lldb_private::Listener::WaitForEvent(lldb_private::TimeValue const*,
std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Core/Listener.cpp:492
#10 lldb_private::Debugger::DefaultEventHandler()
tools/lldb/source/Core/Debugger.cpp:1623
#11 lldb_private::Debugger::EventHandlerThread(void*)
tools/lldb/source/Core/Debugger.cpp:1696
#12 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
==================
WARNING: ThreadSanitizer: data race (pid=64299)
Write of size 4 at 0x7d680001c8ec by main thread:
#0 lldb_private::TerminalState::Save(int, bool)
tools/lldb/source/Host/common/Terminal.cpp:148
#1 lldb_private::Debugger::SaveInputTerminalState()
tools/lldb/source/Core/Debugger.cpp:825
#2 lldb::SBDebugger::SaveInputTerminalState()
tools/lldb/source/API/SBDebugger.cpp:395
#3 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203
#4 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, int,
my_siginfo_t*, void*) tsan_interceptors.o:0
#5 std::string::_Rep::_M_dispose(std::allocator<char> const&)
/build/buildd/gcc-4.8-4.8.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/basic_string.h:538
#6
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:2997
#7 non-virtual thunk to
lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&,
std::string&) tools/lldb/source/Interpreter/CommandInterpreter.cpp:3076
#8 lldb_private::IOHandlerEditline::Run()
tools/lldb/source/Core/IOHandler.cpp:729
#9 lldb_private::Debugger::ExecuteIOHandlers()
tools/lldb/source/Core/Debugger.cpp:907
#10 lldb_private::CommandInterpreter::RunCommandInterpreter(bool, bool,
lldb_private::CommandInterpreterRunOptions&)
tools/lldb/source/Interpreter/CommandInterpreter.cpp:3234
#11 lldb::SBDebugger::RunCommandInterpreter(bool, bool)
tools/lldb/source/API/SBDebugger.cpp:980
#12 Driver::MainLoop() tools/lldb/tools/driver/Driver.cpp:1152
#13 main tools/lldb/tools/driver/Driver.cpp:1252
Previous write of size 4 at 0x7d680001c8ec by thread T2 (mutexes: write
M159):
#0 lldb_private::TerminalState::Save(int, bool)
tools/lldb/source/Host/common/Terminal.cpp:148
#1 lldb_private::Debugger::SaveInputTerminalState()
tools/lldb/source/Core/Debugger.cpp:825
#2 lldb::SBDebugger::SaveInputTerminalState()
tools/lldb/source/API/SBDebugger.cpp:395
#3 sigtstp_handler(int) tools/lldb/tools/driver/Driver.cpp:1203
#4 __tsan::CallUserSignalHandler(__tsan::ThreadState*, bool, bool, int,
my_siginfo_t*, void*) tsan_interceptors.o:0
#5 lldb_private::Condition::Wait(lldb_private::Mutex&,
lldb_private::TimeValue const*, bool*)
tools/lldb/source/Host/common/Condition.cpp:85
#6 lldb_private::Predicate<bool>::WaitForValueEqualTo(bool,
lldb_private::TimeValue const*, bool*)
tools/lldb/include/lldb/Host/Predicate.h:339
#7
lldb_private::Listener::WaitForEventsInternal(lldb_private::TimeValue
const*, lldb_private::Broadcaster*, lldb_private::ConstString const*,
unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Core/Listener.cpp:442
#8 lldb_private::Listener::WaitForEvent(lldb_private::TimeValue const*,
std::shared_ptr<lldb_private::Event>&)
tools/lldb/source/Core/Listener.cpp:492
#9 lldb_private::Debugger::DefaultEventHandler()
tools/lldb/source/Core/Debugger.cpp:1623
#10 lldb_private::Debugger::EventHandlerThread(void*)
tools/lldb/source/Core/Debugger.cpp:1696
#11 lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*)
tools/lldb/source/Host/common/HostNativeThreadBase.cpp:81
-- Ryan Brown
On Mon, May 11, 2015 at 8:20 AM, Ed Maste <emaste at freebsd.org> wrote:
> On 11 May 2015 at 10:21, Pavel Labath <labath at google.com> wrote:
> >
> > BTW, I've noticed that PushIOHandler does not lock
> > m_input_reader_stack.GetMutex(), unlike PopIOHandler, and all other
> > functions which deal with handlers. Is that intentional? I think it
> > should lock the mutex as well.
>
> A slight tangent here, but there's a lot of dubious thread behaviour
> like this. One example I've run into is PR22611 - I see that if we set
> a prompt that fits in libc++'s short string optimization (that is, no
> more than 22 characters) it works fine, but as soon as the prompt is
> 23 characters long we end up pointing at uninitialized memory;
> presumably the race window is much larger in that case.
>
> Unfortunately TSan isn't fully functional on FreeBSD at the moment, so
> it's not that easy for me to find other cases like this with a
> systematic approach. I recall there was an effort to run LLDB under
> TSan on Linux some time ago, and that found a number of issues. Is
> anyone on the Linux side interested in picking that up again?
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20150514/c4b23c54/attachment.html>
More information about the lldb-dev
mailing list