From 403045a58181e204f889366848014093b553be5d Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Fri, 11 Oct 2013 14:48:28 +0200 Subject: 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 --- src/quick/scenegraph/qsgthreadedrenderloop.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') 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(e); if (m_windows.size() == 0) { - WMTryReleaseEvent *wme = static_cast(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"); -- cgit v1.2.3