From 448fffdd8f22a1b5af07b20c8ff5cf3f0f8de608 Mon Sep 17 00:00:00 2001 From: mread Date: Tue, 2 Aug 2011 13:38:45 +0100 Subject: Preventing QSoftkeyManager giving false positive memory leaks QSoftkeyManager has a global static instance that was not being deleted on app exit. This global static instance can own other objects, the number of which grow with use up to a limit. This gives the appearance of a memory leak when the app exits and you see increasing heap cell counts. The change is to use a QScopedPointer to clean up the static on app exit. Reviewed-by: Miikka Heikkinen --- src/gui/kernel/qsoftkeymanager.cpp | 6 +++--- src/gui/kernel/qsoftkeymanager_common_p.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp index a866da3..500bcff 100644 --- a/src/gui/kernel/qsoftkeymanager.cpp +++ b/src/gui/kernel/qsoftkeymanager.cpp @@ -54,7 +54,7 @@ #ifndef QT_NO_SOFTKEYMANAGER QT_BEGIN_NAMESPACE -QSoftKeyManager *QSoftKeyManagerPrivate::self = 0; +QScopedPointer QSoftKeyManagerPrivate::self(0); QString QSoftKeyManager::standardSoftKeyText(StandardSoftKey standardKey) { @@ -85,9 +85,9 @@ QString QSoftKeyManager::standardSoftKeyText(StandardSoftKey standardKey) QSoftKeyManager *QSoftKeyManager::instance() { if (!QSoftKeyManagerPrivate::self) - QSoftKeyManagerPrivate::self = new QSoftKeyManager; + QSoftKeyManagerPrivate::self.reset(new QSoftKeyManager); - return QSoftKeyManagerPrivate::self; + return QSoftKeyManagerPrivate::self.data(); } QSoftKeyManager::QSoftKeyManager() : diff --git a/src/gui/kernel/qsoftkeymanager_common_p.h b/src/gui/kernel/qsoftkeymanager_common_p.h index 5b76e60..e9cbd7d 100644 --- a/src/gui/kernel/qsoftkeymanager_common_p.h +++ b/src/gui/kernel/qsoftkeymanager_common_p.h @@ -67,7 +67,7 @@ public: virtual void updateSoftKeys_sys() {}; protected: - static QSoftKeyManager *self; + static QScopedPointer self; QHash keyedActions; QMultiHash requestedSoftKeyActions; QWidget *initialSoftKeySource; -- cgit v0.12