From 95a9df2c820095fde23d0947bf5669762726053c Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Wed, 5 Feb 2014 03:19:01 +0000 Subject: ScriptInterpreterPython caches the lldb.embedded_interpreter module, and since it caches it in a refcounting-safe PythonObject, the refcount will appropriately go down 1 every time a ScriptInterpreterPython is deallocated However, we were only importing the module once - in InitializePrivate(). In a handful of interpreter creations, the refcount on the run_one_line function would end up at 0, causing LLDB to crash This fixes it by also importing the module for every interpreter, which ensures correct refcounting llvm-svn: 200816 --- lldb/source/Interpreter/ScriptInterpreterPython.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'lldb/source/Interpreter/ScriptInterpreterPython.cpp') diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp index a926fce90c2..9b73a91b7ec 100644 --- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp +++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp @@ -190,13 +190,17 @@ ScriptInterpreterPython::ScriptInterpreterPython (CommandInterpreter &interprete run_string.Clear(); run_string.Printf ("run_one_line (%s, 'import lldb.formatters, lldb.formatters.cpp, pydoc')", m_dictionary_name.c_str()); PyRun_SimpleString (run_string.GetData()); + run_string.Clear(); int new_count = Debugger::TestDebuggerRefCount(); if (new_count > old_count) Debugger::Terminate(); + run_string.Printf ("run_one_line (%s, 'import lldb.embedded_interpreter; from lldb.embedded_interpreter import run_python_interpreter; from lldb.embedded_interpreter import run_one_line')", m_dictionary_name.c_str()); + PyRun_SimpleString (run_string.GetData()); run_string.Clear(); + run_string.Printf ("run_one_line (%s, 'lldb.debugger_unique_id = %" PRIu64 "; pydoc.pager = pydoc.plainpager')", m_dictionary_name.c_str(), interpreter.GetDebugger().GetID()); PyRun_SimpleString (run_string.GetData()); @@ -645,15 +649,9 @@ ScriptInterpreterPython::ExecuteOneLine (const char *command, CommandReturnObjec PythonObject pargs (Py_BuildValue("(Os)", session_dict.get(), command)); if (pargs) { - PythonObject return_value; - { // scope for PythonInputReaderManager - //PythonInputReaderManager py_input(options.GetEnableIO() ? this : NULL); - return_value.Reset(PyObject_CallObject (pfunc, pargs.get())); - } + PythonObject return_value(PyObject_CallObject (pfunc, pargs.get())); if (return_value) - { success = true; - } else if (options.GetMaskoutErrors() && PyErr_Occurred ()) { PyErr_Print(); -- cgit v1.2.3