From a29bdad954d5439e03ee5f3ac4f844b90be1411e Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Tue, 10 Jul 2012 18:23:48 +0000 Subject: Fixing an issue where multiple threads could concurrently try and initialize Python and cause crashes llvm-svn: 160008 --- lldb/source/Interpreter/CommandInterpreter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lldb/source/Interpreter/CommandInterpreter.cpp') diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp index 13493bfedcf..fb26fc493b4 100644 --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -2390,6 +2390,16 @@ CommandInterpreter::HandleCommandsFromFile (FileSpec &cmd_file, ScriptInterpreter * CommandInterpreter::GetScriptInterpreter () { + // + // 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(); -- cgit v1.2.3