diff --git a/src/Gui/PythonWrapper.cpp b/src/Gui/PythonWrapper.cpp index 4522b76256..d11b3c6e22 100644 --- a/src/Gui/PythonWrapper.cpp +++ b/src/Gui/PythonWrapper.cpp @@ -123,6 +123,7 @@ PyTypeObject** SbkPySide2_QtWidgetsTypes=nullptr; #endif #include +#include #include #include @@ -236,7 +237,7 @@ namespace Gui { */ class WrapperManager : public QObject { - std::unordered_map> wrappers; + std::unordered_map> wrappers; public: static WrapperManager& instance() @@ -256,7 +257,7 @@ public: QObject::connect(obj, &QObject::destroyed, this, &WrapperManager::destroyed); } - wrappers[obj].push_back(pyobj); + wrappers[obj].emplace_back(pyobj); } private: @@ -271,8 +272,10 @@ private: #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) auto key = wrappers.find(obj); if (key != wrappers.end()) { + Base::PyGILStateLocker lock; for (auto it : key->second) { - Shiboken::Object::setValidCpp(reinterpret_cast(it), false); + auto value = it.ptr(); + Shiboken::Object::setValidCpp(reinterpret_cast(value), false); } wrappers.erase(key);