diff options
author | Giulio Camuffo <giuliocamuffo@gmail.com> | 2013-10-11 14:48:28 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-14 14:03:22 +0200 |
commit | 403045a58181e204f889366848014093b553be5d (patch) | |
tree | 3929d0abca03358dfa91822bd277f65f604d8402 /src/quick | |
parent | de3c837dfa230014c38445316fbe0cf7ca41e183 (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.cpp | 8 |
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"); |