diff options
Diffstat (limited to 'sources/pyside6')
| -rw-r--r-- | sources/pyside6/libpyside/pyside.cpp | 13 |
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"; |
