diff options
author | Olivier Blin <olivier.blin@softathome.com> | 2014-05-21 15:37:43 +0200 |
---|---|---|
committer | Olivier Blin <qt@blino.org> | 2015-06-12 09:52:21 +0000 |
commit | e8904251a8758c11ae8fa9b9f7adcd575833f23a (patch) | |
tree | 44f7e8ee80ade454be715beb1a0c0e2b9538650f | |
parent | ad9bd8f672f623da9206aa8cef83b8ef50b49836 (diff) | |
download | qtwayland-e8904251a8758c11ae8fa9b9f7adcd575833f23a.tar.gz qtwayland-e8904251a8758c11ae8fa9b9f7adcd575833f23a.tar.bz2 qtwayland-e8904251a8758c11ae8fa9b9f7adcd575833f23a.zip |
Fix crash when resizing a window in brcm-egl
This occurs for example when a Qt Quick2 application calls
showFullScreen() while a rendering is already in progress.
The GUI thread was calling destroyEglSurfaces() from setGeometry() and
thus destroying the buffers, while the render thread was trying to use
the buffers from swapBuffers().
There was a division by zero in swapBuffers() with the modulo m_count
operation, because EGL surfaces were destroyed and m_count was 0.
This fix is quite fragile, proper locking on buffers would be better.
Change-Id: I41fcb2fcebec84c0dfc82ce56c6e323d3722b30a
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
-rw-r--r-- | src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglwindow.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglwindow.cpp b/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglwindow.cpp index 3d3fdad2..7cead1dc 100644 --- a/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglwindow.cpp +++ b/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglwindow.cpp @@ -243,6 +243,9 @@ void QWaylandBrcmEglWindow::swapBuffers() glFinish(); } + if (!m_count) + return; + m_buffers[m_current]->bind(); attach(m_buffers[m_current], 0, 0); damage(QRect(QPoint(), geometry().size())); |