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

Reply via email to