<rdar://problem/10649734>

Fixed an issue where the python interpreter could deadlock LLDB.

llvm-svn: 147640
This commit is contained in:
Greg Clayton 2012-01-06 00:47:38 +00:00
parent 39c6d0f9ae
commit 1a0be3b1f2
1 changed files with 16 additions and 4 deletions

View File

@ -594,14 +594,26 @@ ScriptInterpreterPython::InputReaderCallback
break;
case eInputReaderDeactivate:
script_interpreter->LeaveSession ();
// When another input reader is pushed, don't leave the session...
//script_interpreter->LeaveSession ();
break;
case eInputReaderReactivate:
{
ScriptInterpreterPython::Locker locker(script_interpreter,
ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
ScriptInterpreterPython::Locker::FreeAcquiredLock);
// Don't try and acquire the interpreter lock here because code like
// this:
//
// (lldb) script
// >>> v = lldb.frame.EvaluateExpression("collection->get_at_index(12)")
//
// This will cause the process to run. The interpreter lock is taken
// by the input reader for the "script" command. If we try and acquire
// the lock here, when the process runs it might deactivate this input
// reader (if STDIN is hooked up to the inferior process) and
// reactivate it when the process stops which will deadlock.
//ScriptInterpreterPython::Locker locker(script_interpreter,
// ScriptInterpreterPython::Locker::AcquireLock | ScriptInterpreterPython::Locker::InitSession,
// ScriptInterpreterPython::Locker::FreeAcquiredLock);
}
break;