aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/pyside.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside6/libpyside/pyside.cpp')
-rw-r--r--sources/pyside6/libpyside/pyside.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp
index 0afe6db5f..02cff066b 100644
--- a/sources/pyside6/libpyside/pyside.cpp
+++ b/sources/pyside6/libpyside/pyside.cpp
@@ -717,11 +717,14 @@ static void invalidatePtr(any_t *object)
if (Py_IsInitialized() == 0)
return;
- Shiboken::GilState state;
-
- SbkObject *wrapper = Shiboken::BindingManager::instance().retrieveWrapper(object);
- if (wrapper != nullptr)
- Shiboken::BindingManager::instance().releaseWrapper(wrapper);
+ // Check for existence before locking (fix hang when QObjects
+ // are moved to different threads).
+ auto &bindingManager = Shiboken::BindingManager::instance();
+ if (bindingManager.hasWrapper(object)) {
+ Shiboken::GilState state;
+ if (SbkObject *wrapper = bindingManager.retrieveWrapper(object))
+ bindingManager.releaseWrapper(wrapper);
+ }
}
static const char invalidatePropertyName[] = "_PySideInvalidatePtr";