summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Interpreter/ScriptInterpreter.h19
-rw-r--r--lldb/include/lldb/Interpreter/ScriptInterpreterPython.h5
-rw-r--r--lldb/include/lldb/lldb-forward.h1
-rw-r--r--lldb/source/Interpreter/ScriptInterpreter.cpp6
-rw-r--r--lldb/source/Interpreter/ScriptInterpreterPython.cpp10
5 files changed, 40 insertions, 1 deletions
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreter.h b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
index cc66a08f0cf..417c79fde32 100644
--- a/lldb/include/lldb/Interpreter/ScriptInterpreter.h
+++ b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
@@ -61,6 +61,22 @@ public:
protected:
void* m_object;
};
+
+class ScriptInterpreterLocker
+{
+public:
+
+ ScriptInterpreterLocker ()
+ {
+ }
+
+ virtual ~ScriptInterpreterLocker ()
+ {
+ }
+private:
+ DISALLOW_COPY_AND_ASSIGN (ScriptInterpreterLocker);
+};
+
class ScriptInterpreter
{
@@ -409,6 +425,9 @@ public:
return lldb::ScriptInterpreterObjectSP(new ScriptInterpreterObject(object));
}
+ virtual std::auto_ptr<ScriptInterpreterLocker>
+ AcquireInterpreterLock ();
+
const char *
GetScriptInterpreterPtyName ();
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h b/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
index c6a66fdb432..31e95836251 100644
--- a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
+++ b/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
@@ -181,6 +181,9 @@ public:
virtual lldb::ScriptInterpreterObjectSP
MakeScriptObject (void* object);
+ virtual std::auto_ptr<ScriptInterpreterLocker>
+ AcquireInterpreterLock ();
+
void
CollectDataForBreakpointCommandCallback (BreakpointOptions *bp_options,
CommandReturnObject &result);
@@ -271,7 +274,7 @@ private:
DISALLOW_COPY_AND_ASSIGN (ScriptInterpreterPythonObject);
};
- class Locker
+ class Locker : public ScriptInterpreterLocker
{
public:
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index 31148327cf6..2227fdb4c21 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -178,6 +178,7 @@ class RegisterValue;
class RegularExpression;
class Scalar;
class ScriptInterpreter;
+class ScriptInterpreterLocker;
class ScriptInterpreterObject;
#ifndef LLDB_DISABLE_PYTHON
class ScriptInterpreterPython;
diff --git a/lldb/source/Interpreter/ScriptInterpreter.cpp b/lldb/source/Interpreter/ScriptInterpreter.cpp
index 6bc6cd0d2ad..0e85902cff2 100644
--- a/lldb/source/Interpreter/ScriptInterpreter.cpp
+++ b/lldb/source/Interpreter/ScriptInterpreter.cpp
@@ -81,6 +81,12 @@ ScriptInterpreter::LanguageToString (lldb::ScriptLanguage language)
return return_value;
}
+std::auto_ptr<ScriptInterpreterLocker>
+ScriptInterpreter::AcquireInterpreterLock ()
+{
+ return std::auto_ptr<ScriptInterpreterLocker>(new ScriptInterpreterLocker());
+}
+
void
ScriptInterpreter::InitializeInterpreter (SWIGInitCallback python_swig_init_callback)
{
diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp
index 5a97107ac10..68e984c1e6b 100644
--- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp
+++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp
@@ -135,6 +135,7 @@ ScriptInterpreterPython::Locker::Locker (ScriptInterpreterPython *py_interpreter
uint16_t on_entry,
uint16_t on_leave,
FILE* wait_msg_handle) :
+ ScriptInterpreterLocker (),
m_teardown_session( (on_leave & TearDownSession) == TearDownSession ),
m_python_interpreter(py_interpreter),
m_tmp_fh(wait_msg_handle)
@@ -2806,6 +2807,15 @@ ScriptInterpreterPython::GetDocumentationForItem(const char* item, std::string&
}
}
+std::auto_ptr<ScriptInterpreterLocker>
+ScriptInterpreterPython::AcquireInterpreterLock ()
+{
+ std::auto_ptr<ScriptInterpreterLocker> py_lock(new Locker(this,
+ Locker::AcquireLock | Locker::InitSession,
+ Locker::FreeLock | Locker::TearDownSession));
+ return py_lock;
+}
+
void
ScriptInterpreterPython::InitializeInterpreter (SWIGInitCallback python_swig_init_callback)
{
OpenPOWER on IntegriCloud