Calling SBDebugger::CeeateTarget being called on multiple threads was crashing LLDB.
authorGreg Clayton <gclayton@apple.com>
Fri, 9 Dec 2016 01:21:14 +0000 (01:21 +0000)
committerGreg Clayton <gclayton@apple.com>
Fri, 9 Dec 2016 01:21:14 +0000 (01:21 +0000)
commit7904046c33d8c8a24e1d78303bf0ebc61d7d9ef1
tree9369d32b2747e41bfe1e2d9843cb028d9068e043
parent867e7d17655367377137393ea7d2fa68268d3001
Calling SBDebugger::CeeateTarget being called on multiple threads was crashing LLDB.

I found the race condition in:

ScriptInterpreter *CommandInterpreter::GetScriptInterpreter(bool can_create);

More than one "ScriptInterpreter *" was being returned due to the race which caused any clients with the first one to now be pointing to freed memory and we would quickly crash.

Added a test to catch this so we don't regress.

<rdar://problem/28356584>

llvm-svn: 289169
lldb/include/lldb/Interpreter/CommandInterpreter.h
lldb/packages/Python/lldbsuite/test/api/multiple-targets/Makefile [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/api/multiple-targets/TestMultipleTargets.py [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/api/multiple-targets/main.cpp [new file with mode: 0644]
lldb/source/Interpreter/CommandInterpreter.cpp