diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-01-27 14:49:02 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 21:12:35 +0100 |
commit | 69b9943d949a12746711feb490261eed7675e4a8 (patch) | |
tree | 7d795ceb07deaaa3bb66aab8a7c01052096dff98 | |
parent | d21f28956e494baae311dc6d8f9dfbd4448965b5 (diff) |
Windows: Fix exit crash related to deletion of platform screens.
Do not delete screens in the destructor as this might call
back to the Windows and use QWindowsContext.
Change-Id: I5e66e480d4b6ddb8b17cc92e4bef93013e336be6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
-rw-r--r-- | src/plugins/platforms/windows/qwindowscontext.cpp | 1 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsscreen.cpp | 5 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsscreen.h | 3 |
3 files changed, 3 insertions, 6 deletions
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index cd11d82d2d..e7bb997da9 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -291,6 +291,7 @@ QWindowsContext::~QWindowsContext() if (d->m_oleInitializeResult == S_OK || d->m_oleInitializeResult == S_FALSE) OleUninitialize(); + d->m_screenManager.clearScreens(); // Order: Potentially calls back to the windows. m_instance = 0; } diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp index b2c85247f6..dccd582473 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.cpp +++ b/src/plugins/platforms/windows/qwindowsscreen.cpp @@ -304,11 +304,6 @@ QWindowsScreenManager::QWindowsScreenManager() : { } -QWindowsScreenManager::~QWindowsScreenManager() -{ - qDeleteAll(m_screens); -} - /*! \brief Triggers synchronization of screens (WM_DISPLAYCHANGE). diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h index 7edf2ad0f5..c2cf0b4523 100644 --- a/src/plugins/platforms/windows/qwindowsscreen.h +++ b/src/plugins/platforms/windows/qwindowsscreen.h @@ -114,7 +114,8 @@ public: typedef QList<QWindowsScreen *> WindowsScreenList; QWindowsScreenManager(); - ~QWindowsScreenManager(); + + inline void clearScreens() { qDeleteAll(m_screens); m_screens.clear(); } void handleScreenChanges(); bool handleDisplayChange(WPARAM wParam, LPARAM lParam); |