[Lldb-commits] [lldb] r169614 - in /lldb/trunk: include/lldb/Interpreter/ScriptInterpreterPython.h source/Core/Module.cpp source/Interpreter/ScriptInterpreterPython.cpp
Jim Ingham
jingham at apple.com
Fri Dec 7 09:43:38 PST 2012
Author: jingham
Date: Fri Dec 7 11:43:38 2012
New Revision: 169614
URL: http://llvm.org/viewvc/llvm-project?rev=169614&view=rev
Log:
Separate initing the stdout/stderr for running the Python Script interpreter from initing the lldb.target/frame/etc globals,
and only do the latter when it makes sense to.
<rdar://problem/12554049>
Modified:
lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h
lldb/trunk/source/Core/Module.cpp
lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
Modified: lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h?rev=169614&r1=169613&r2=169614&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h (original)
+++ lldb/trunk/include/lldb/Interpreter/ScriptInterpreterPython.h Fri Dec 7 11:43:38 2012
@@ -203,7 +203,7 @@
protected:
void
- EnterSession ();
+ EnterSession (bool init_lldb_globals);
void
LeaveSession ();
@@ -264,7 +264,8 @@
enum OnEntry
{
AcquireLock = 0x0001,
- InitSession = 0x0002
+ InitSession = 0x0002,
+ InitGlobals = 0x0004
};
enum OnLeave
@@ -287,7 +288,7 @@
DoAcquireLock ();
bool
- DoInitSession ();
+ DoInitSession (bool init_lldb_globals);
bool
DoFreeLock ();
Modified: lldb/trunk/source/Core/Module.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Module.cpp?rev=169614&r1=169613&r2=169614&view=diff
==============================================================================
--- lldb/trunk/source/Core/Module.cpp (original)
+++ lldb/trunk/source/Core/Module.cpp Fri Dec 7 11:43:38 2012
@@ -1179,7 +1179,9 @@
{
StreamString scripting_stream;
scripting_fspec.Dump(&scripting_stream);
- bool did_load = script_interpreter->LoadScriptingModule(scripting_stream.GetData(), false, true, error);
+ const bool can_reload = false;
+ const bool init_lldb_globals = false;
+ bool did_load = script_interpreter->LoadScriptingModule(scripting_stream.GetData(), can_reload, init_lldb_globals, error);
if (!did_load)
return false;
}
Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=169614&r1=169613&r2=169614&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
+++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Fri Dec 7 11:43:38 2012
@@ -150,8 +150,8 @@
m_tmp_fh = (m_python_interpreter->m_dbg_stdout ? m_python_interpreter->m_dbg_stdout : stdout);
DoAcquireLock();
- if ( (on_entry & InitSession) == InitSession )
- DoInitSession();
+ if ((on_entry & InitSession) == InitSession)
+ DoInitSession((on_entry & InitGlobals) == InitGlobals);
}
bool
@@ -165,11 +165,11 @@
}
bool
-ScriptInterpreterPython::Locker::DoInitSession()
+ScriptInterpreterPython::Locker::DoInitSession(bool init_lldb_globals)
{
if (!m_python_interpreter)
return false;
- m_python_interpreter->EnterSession ();
+ m_python_interpreter->EnterSession (init_lldb_globals);
return true;
}
@@ -308,7 +308,7 @@
if (pty_slave_name != NULL && PyThreadState_GetDict() != NULL)
{
ScriptInterpreterPython::Locker locker(script_interpreter,
- ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
+ ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession | ScriptInterpreterPython::Locker::InitGlobals,
ScriptInterpreterPython::Locker::FreeAcquiredLock);
run_string.Printf ("run_one_line (%s, 'save_stderr = sys.stderr')", script_interpreter->m_dictionary_name.c_str());
PyRun_SimpleString (run_string.GetData());
@@ -602,7 +602,7 @@
}
void
-ScriptInterpreterPython::EnterSession ()
+ScriptInterpreterPython::EnterSession (bool init_lldb_globals)
{
// If we have already entered the session, without having officially 'left' it, then there is no need to
// 'enter' it again.
@@ -614,20 +614,16 @@
StreamString run_string;
- run_string.Printf ( "run_one_line (%s, 'lldb.debugger_unique_id = %" PRIu64, m_dictionary_name.c_str(), GetCommandInterpreter().GetDebugger().GetID());
- run_string.Printf ( "; lldb.debugger = lldb.SBDebugger.FindDebuggerWithID (%" PRIu64 ")", GetCommandInterpreter().GetDebugger().GetID());
- run_string.PutCString ("; lldb.target = lldb.debugger.GetSelectedTarget()");
- run_string.PutCString ("; lldb.process = lldb.target.GetProcess()");
- run_string.PutCString ("; lldb.thread = lldb.process.GetSelectedThread ()");
- run_string.PutCString ("; lldb.frame = lldb.thread.GetSelectedFrame ()");
- // Make sure STDIN is closed since when we run this as an embedded
- // interpreter we don't want someone to call "line = sys.stdin.readline()"
- // and lock up. We don't have multiple windows and when the interpreter is
- // embedded we don't know we should be feeding input to the embedded
- // interpreter or to the python sys.stdin. We also don't want to let python
- // play with the real stdin from this process, so we need to close it...
- //run_string.PutCString ("; sys.stdin.close()");
- run_string.PutCString ("')");
+ if (init_lldb_globals)
+ {
+ run_string.Printf ( "run_one_line (%s, 'lldb.debugger_unique_id = %" PRIu64, m_dictionary_name.c_str(), GetCommandInterpreter().GetDebugger().GetID());
+ run_string.Printf ( "; lldb.debugger = lldb.SBDebugger.FindDebuggerWithID (%" PRIu64 ")", GetCommandInterpreter().GetDebugger().GetID());
+ run_string.PutCString ("; lldb.target = lldb.debugger.GetSelectedTarget()");
+ run_string.PutCString ("; lldb.process = lldb.target.GetProcess()");
+ run_string.PutCString ("; lldb.thread = lldb.process.GetSelectedThread ()");
+ run_string.PutCString ("; lldb.frame = lldb.thread.GetSelectedFrame ()");
+ run_string.PutCString ("')");
+ }
PyRun_SimpleString (run_string.GetData());
run_string.Clear();
@@ -720,7 +716,7 @@
// method to pass the command string directly down to Python.
Locker locker(this,
- ScriptInterpreterPython::Locker::AcquireLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitSession : 0),
+ ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitGlobals : 0),
ScriptInterpreterPython::Locker::FreeAcquiredLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::TearDownSession : 0));
bool success = false;
@@ -842,7 +838,9 @@
{
ScriptInterpreterPython::Locker locker(script_interpreter,
- ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
+ ScriptInterpreterPython::Locker::AcquireLock
+ | ScriptInterpreterPython::Locker::InitSession
+ | ScriptInterpreterPython::Locker::InitGlobals,
ScriptInterpreterPython::Locker::FreeAcquiredLock);
}
@@ -887,7 +885,9 @@
case eInputReaderReactivate:
{
ScriptInterpreterPython::Locker locker(script_interpreter,
- ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
+ ScriptInterpreterPython::Locker::AcquireLock
+ | ScriptInterpreterPython::Locker::InitSession
+ | ScriptInterpreterPython::Locker::InitGlobals,
ScriptInterpreterPython::Locker::FreeAcquiredLock);
}
break;
@@ -992,7 +992,9 @@
{
Locker locker(this,
- ScriptInterpreterPython::Locker::AcquireLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitSession : 0),
+ ScriptInterpreterPython::Locker::AcquireLock
+ | ScriptInterpreterPython::Locker::InitSession
+ | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitGlobals : 0),
ScriptInterpreterPython::Locker::FreeAcquiredLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::TearDownSession : 0));
PyObject *py_return = NULL;
@@ -1161,7 +1163,9 @@
Locker locker(this,
- ScriptInterpreterPython::Locker::AcquireLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitSession : 0),
+ ScriptInterpreterPython::Locker::AcquireLock
+ | ScriptInterpreterPython::Locker::InitSession
+ | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::InitGlobals : 0),
ScriptInterpreterPython::Locker::FreeAcquiredLock | (options.GetSetLLDBGlobals() ? ScriptInterpreterPython::Locker::TearDownSession : 0));
bool success = false;
@@ -2171,7 +2175,7 @@
// we can just release the GIL after finishing our work.
// If finer-grained locking is desirable, we can lock and unlock the GIL only when calling a python function.
Locker locker(script_interpreter,
- ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
+ ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession | ScriptInterpreterPython::Locker::InitGlobals,
ScriptInterpreterPython::Locker::FreeAcquiredLock | ScriptInterpreterPython::Locker::TearDownSession);
run_string.Printf ("run_one_line (%s, 'save_stderr = sys.stderr')", script_interpreter->m_dictionary_name.c_str());
@@ -2443,7 +2447,7 @@
bool
ScriptInterpreterPython::LoadScriptingModule (const char* pathname,
bool can_reload,
- bool init_lldb_globals,
+ bool init_session,
lldb_private::Error& error)
{
if (!pathname || !pathname[0])
@@ -2476,8 +2480,8 @@
// Before executing Pyton code, lock the GIL.
Locker py_lock (this,
- Locker::AcquireLock | (init_lldb_globals ? Locker::InitSession : 0),
- Locker::FreeAcquiredLock | (init_lldb_globals ? Locker::TearDownSession : 0));
+ Locker::AcquireLock | (init_session ? Locker::InitSession : 0),
+ Locker::FreeAcquiredLock | (init_session ? Locker::TearDownSession : 0));
// now make sure that Python has "directory" in the search path
StreamString command_stream;
@@ -2631,7 +2635,9 @@
std::string err_msg;
{
- Locker py_lock(this);
+ Locker py_lock(this,
+ Locker::AcquireLock | Locker::InitSession | Locker::InitGlobals,
+ Locker::FreeLock | Locker::TearDownSession);
SynchronicityHandler synch_handler(debugger_sp,
synchronicity);
More information about the lldb-commits
mailing list