summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-01-27 14:49:02 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-27 21:12:35 +0100
commit69b9943d949a12746711feb490261eed7675e4a8 (patch)
tree7d795ceb07deaaa3bb66aab8a7c01052096dff98
parentd21f28956e494baae311dc6d8f9dfbd4448965b5 (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.cpp1
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.cpp5
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.h3
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);