tatyana-krasnukha created this revision. tatyana-krasnukha added reviewers: clayborg, granata.enrico. Herald added a subscriber: lldb-commits.
Swig wraps C++ code into `SWIG_PYTHON_THREAD_BEGIN_ALLOW; ... SWIG_PYTHON_THREAD_END_ALLOW;` Thus, lldb crashs with "Fatal Python error: Python memory allocator called without holding the GIL" when calls `lldb_SB***___str__` function. Repository: rLLDB LLDB https://reviews.llvm.org/D51569 Files: scripts/Python/python-extensions.swig
Index: scripts/Python/python-extensions.swig =================================================================== --- scripts/Python/python-extensions.swig +++ scripts/Python/python-extensions.swig @@ -7,10 +7,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBBlock { @@ -21,10 +25,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBBreakpoint { @@ -35,10 +43,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -64,10 +76,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -79,10 +95,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -110,10 +130,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } /* the write() and flush() calls are not part of the SB API proper, and are solely for Python usage @@ -137,10 +161,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -164,10 +192,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBDebugger { @@ -178,10 +210,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBDeclaration { @@ -192,10 +228,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -221,10 +261,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBFileSpec { @@ -235,10 +279,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBFrame { @@ -249,10 +297,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBFunction { @@ -263,10 +315,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -292,10 +348,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBInstructionList { @@ -306,10 +366,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBLineEntry { @@ -320,10 +384,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -349,10 +417,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -364,10 +436,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -393,10 +469,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -408,10 +488,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -423,10 +507,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBSection { @@ -437,10 +525,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -479,10 +571,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -506,10 +602,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBSymbolContextList { @@ -520,10 +620,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } @@ -535,10 +639,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ @@ -564,10 +672,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeCategory { @@ -578,10 +690,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeFilter { @@ -592,10 +708,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -619,10 +739,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeMember { @@ -633,10 +757,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeMemberFunction { @@ -647,10 +775,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeEnumMember { @@ -661,10 +793,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBTypeNameSpecifier { @@ -675,10 +811,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -702,10 +842,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -729,10 +873,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -756,10 +904,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } %pythoncode %{ def __eq__(self, rhs): @@ -783,10 +935,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBValueList { @@ -806,10 +962,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } } %extend lldb::SBWatchpoint { @@ -820,10 +980,14 @@ size_t desc_len = description.GetSize(); if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) --desc_len; - if (desc_len > 0) - return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); - else + + if (desc_len == 0) return lldb_private::PythonString("").release(); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyObject *result = lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + SWIG_PYTHON_THREAD_END_BLOCK; + return result; } }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits