diff options
Diffstat (limited to 'libshiboken')
-rw-r--r-- | libshiboken/basewrapper.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp index 6c7d222ed..77f6cb719 100644 --- a/libshiboken/basewrapper.cpp +++ b/libshiboken/basewrapper.cpp @@ -30,6 +30,7 @@ #include <cstring> #include <cstddef> #include <algorithm> +#include "threadstatesaver.h" extern "C" { @@ -159,6 +160,8 @@ void SbkDeallocWrapper(PyObject* pyObj) if (sbkObj->weakreflist) PyObject_ClearWeakRefs(pyObj); + Shiboken::ThreadStateSaver threadSaver; + threadSaver.save(); // If I have ownership and is valid delete C++ pointer if (sbkObj->d->hasOwnership && sbkObj->d->validCppObject) { SbkObjectType* sbkType = reinterpret_cast<SbkObjectType*>(pyObj->ob_type); @@ -169,8 +172,8 @@ void SbkDeallocWrapper(PyObject* pyObj) sbkType->d->cpp_dtor(sbkObj->d->cptr[0]); } } - - Shiboken::Object::deallocData(sbkObj); + threadSaver.restore(); + Shiboken::Object::deallocData(sbkObj, !sbkObj->d->containsCppWrapper); } void SbkDeallocWrapperWithPrivateDtor(PyObject* self) |