From 1a0be3b1f2ab0597ece119ec3f48763aa73fc781 Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Fri, 6 Jan 2012 00:47:38 +0000 Subject: Fixed an issue where the python interpreter could deadlock LLDB. llvm-svn: 147640 --- lldb/source/Interpreter/ScriptInterpreterPython.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'lldb/source/Interpreter/ScriptInterpreterPython.cpp') diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp index 241f081f6e6f..ee3f14c8e62e 100644 --- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp +++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp @@ -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; -- cgit v1.2.3