diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-12-02 09:01:20 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-01-28 11:49:13 +0000 |
commit | fed6c35461e1b98af50e5f3c30aaacee45969472 (patch) | |
tree | 58db0f516658625775aaf40a5b2f32c1e061e26e /src/gui/accessible | |
parent | 944110089d4cb1c229dba422989e154db65a67fd (diff) |
QAccessibleCache: Replace Q_GLOBAL_STATIC by instance pointer
QAccessibleCache is a QObject which emits signals at destruction time.
This can lead to crashes in situations where the library is unloaded
after QApplication has been deleted, for example in PySide2.
Change it to a pointer instance variable that is cleaned up by a
post routine.
Task-number: PYSIDE-452
Change-Id: If0d673c7dfe33c8d2d7298bc081824f9d6d7efdc
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/gui/accessible')
-rw-r--r-- | src/gui/accessible/qaccessiblecache.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gui/accessible/qaccessiblecache.cpp b/src/gui/accessible/qaccessiblecache.cpp index 43c4b15cb0..097634c0a3 100644 --- a/src/gui/accessible/qaccessiblecache.cpp +++ b/src/gui/accessible/qaccessiblecache.cpp @@ -49,11 +49,21 @@ QT_BEGIN_NAMESPACE \brief Maintains a cache of accessible interfaces. */ -Q_GLOBAL_STATIC(QAccessibleCache, qAccessibleCache) +static QAccessibleCache *accessibleCache = nullptr; + +static void cleanupAccessibleCache() +{ + delete accessibleCache; + accessibleCache = Q_NULLPTR; +} QAccessibleCache *QAccessibleCache::instance() { - return qAccessibleCache; + if (!accessibleCache) { + accessibleCache = new QAccessibleCache; + qAddPostRoutine(cleanupAccessibleCache); + } + return accessibleCache; } /* |