<rdar://problem/11751427> Fixing an issue where multiple threads could concurrently try and initialize Python and cause crashes

git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@160008 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/CommandInterpreter.cpp b/source/Interpreter/CommandInterpreter.cpp
index 13493bf..fb26fc4 100644
--- a/source/Interpreter/CommandInterpreter.cpp
+++ b/source/Interpreter/CommandInterpreter.cpp
@@ -2390,6 +2390,16 @@
 ScriptInterpreter *
 CommandInterpreter::GetScriptInterpreter ()
 {
+    // <rdar://problem/11751427>
+    // we need to protect the initialization of the script interpreter
+    // otherwise we could end up with two threads both trying to create
+    // their instance of it, and for some languages (e.g. Python)
+    // this is a bulletproof recipe for disaster!
+    // this needs to be a function-level static because multiple Debugger instances living in the same process
+    // still need to be isolated and not try to initialize Python concurrently
+    static Mutex *interpreter_mutex = new Mutex(Mutex::eMutexTypeRecursive);
+    Mutex::Locker interpreter_lock(*interpreter_mutex);
+    
     if (m_script_interpreter_ap.get() != NULL)
         return m_script_interpreter_ap.get();