[Libreoffice-commits] core.git: vcl/source

Miklos Vajna vmiklos at collabora.co.uk
Fri May 18 07:20:06 UTC 2018


 vcl/source/opengl/OpenGLContext.cxx |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

New commits:
commit 2a6171ed6fb85b3419dcf5cf1346cf1eec447987
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu May 17 17:21:40 2018 +0200

    tdf#104893 vcl opengl: fix assert failure when starting chart editing
    
    OpenGLContext::prepareForYield() assumed that in case we have a current
    context, then it's the last one, but that's not the case for chart windows
    since commit 78b100ec9cb0db2f7b33ece5ad3287a67a37246f (only init the OpenGL
    context if we need it, 2016-06-07), which creates an OpenGLContext instance
    (which is then the last one in the context list) but explicitly doesn't
    initialize it (so that it would become the current one).
    
    Fix the problem by resetting not the last but the last current context.
    
    Change-Id: Ie0e96927473290590cd6333e5cdcb7daa009431b
    Reviewed-on: https://gerrit.libreoffice.org/54495
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 6c254182a454..5fd4c4e0b948 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -483,8 +483,19 @@ void OpenGLContext::prepareForYield()
 
     SAL_INFO("vcl.opengl", "Unbinding contexts in preparation for yield");
 
-    if( pCurrentCtx->isCurrent() )
-        pCurrentCtx->resetCurrent();
+    // Find the first context that is current and reset it.
+    // Usually the last context is the current, but not in case a new
+    // OpenGLContext is created already but not yet initialized.
+    while (pCurrentCtx.is())
+    {
+        if (pCurrentCtx->isCurrent())
+        {
+            pCurrentCtx->resetCurrent();
+            break;
+        }
+
+        pCurrentCtx = pCurrentCtx->mpPrevContext;
+    }
 
     assert (!hasCurrent());
 }


More information about the Libreoffice-commits mailing list