aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorGiulio Camuffo <giuliocamuffo@gmail.com>2013-10-11 14:48:28 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-14 14:03:22 +0200
commit403045a58181e204f889366848014093b553be5d (patch)
tree3929d0abca03358dfa91822bd277f65f604d8402 /src/quick
parentde3c837dfa230014c38445316fbe0cf7ca41e183 (diff)
Don't leave a window current when removing it
The window may be deleted before any other window is make current, and that would lead to memory corruption with Mesa's EGL. Change-Id: I414b972fd517f60c28d194fa059bf7871e422872 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/scenegraph/qsgthreadedrenderloop.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/quick/scenegraph/qsgthreadedrenderloop.cpp b/src/quick/scenegraph/qsgthreadedrenderloop.cpp
index d19c047e5a..7421db1db1 100644
--- a/src/quick/scenegraph/qsgthreadedrenderloop.cpp
+++ b/src/quick/scenegraph/qsgthreadedrenderloop.cpp
@@ -406,22 +406,26 @@ bool QSGRenderThread::event(QEvent *e)
pendingUpdate |= SyncRequest;
return true;
- case WM_TryRelease:
+ case WM_TryRelease: {
RLDEBUG1(" Render: WM_TryRelease");
mutex.lock();
+ WMTryReleaseEvent *wme = static_cast<WMTryReleaseEvent *>(e);
if (m_windows.size() == 0) {
- WMTryReleaseEvent *wme = static_cast<WMTryReleaseEvent *>(e);
RLDEBUG1(" Render: - setting exit flag and invalidating GL");
invalidateOpenGL(wme->window, wme->inDestructor);
shouldExit = !gl;
if (sleeping)
stopEventProcessing = true;
+ } else if (wme->window == gl->surface()) {
+ RLDEBUG1(" Render: - destroying the current window. Calling doneCurrent()...");
+ gl->doneCurrent();
} else {
RLDEBUG1(" Render: - not releasing anything because we have active windows...");
}
waitCondition.wakeOne();
mutex.unlock();
return true;
+ }
case WM_Grab: {
RLDEBUG1(" Render: WM_Grab");