[Libreoffice-commits] core.git: Branch 'libreoffice-6-0' - svx/source vcl/opengl

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Jul 27 09:21:34 UTC 2018


 svx/source/svdraw/svdograf.cxx |    3 +++
 vcl/opengl/salbmp.cxx          |    6 ++++++
 2 files changed, 9 insertions(+)

New commits:
commit 2038ab9d4cbb7282172a65352e4ed1a852404b29
Author:     Miklos Vajna <vmiklos at collabora.co.uk>
AuthorDate: Wed Jul 25 17:02:21 2018 +0200
Commit:     Miklos Vajna <vmiklos at collabora.co.uk>
CommitDate: Fri Jul 27 11:21:07 2018 +0200

    tdf#118860 svx opengl: avoid SalBitmap creation without solar mutex
    
    The bugdoc has 2 slides. When switching to the second slide, the graphic
    is loaded in the background, but OpenGLSalBitmap::Create() can't work
    correctly if the caller doesn't own the solar mutex.
    
    This already asserts in OpenGLContext::prepareForYield() in a less
    obvious way.
    
    Focus on the correctness, so just hold the solar mutex during the whole
    ImportGrpahic() call. If it turns out that the purpose of running this
    on a thread is to avoid synchronous network traffic, then the data could
    be first copied to a memory stream, and only then take the lock + import
    the graphic.
    
    (cherry picked from commit 919ccaba419531d689231b76a43ab29c6a9ec65a)
    
    Change-Id: I88203c12b4e7a5f2b689928c01e2ba953c5b13c5
    Reviewed-on: https://gerrit.libreoffice.org/58126
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 3eb3abfe0953..ab179960f88c 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -93,6 +93,9 @@ const Graphic ImpLoadLinkedGraphic( const OUString& aFileName, const OUString& a
         aFilterData[ 0 ].Name = "CreateNativeLink";
         aFilterData[ 0 ].Value <<= true;
 
+        // Need to own the solar mutex while creating a SalBitmap.
+        SolarMutexGuard aGuard;
+
         // #i123042# for e.g SVG the path is needed, so hand it over here. I have no real idea
         // what consequences this may have; maybe this is not handed over by purpose here. Not
         // handing it over means that any GraphicFormat that internally needs a path as base
diff --git a/vcl/opengl/salbmp.cxx b/vcl/opengl/salbmp.cxx
index 1ae3e2ae4a01..a68c2f38129f 100644
--- a/vcl/opengl/salbmp.cxx
+++ b/vcl/opengl/salbmp.cxx
@@ -117,6 +117,7 @@ OpenGLSalBitmap::~OpenGLSalBitmap()
 
 bool OpenGLSalBitmap::Create( const OpenGLTexture& rTex, long nX, long nY, long nWidth, long nHeight )
 {
+    DBG_TESTSOLARMUTEX();
     static const BitmapPalette aEmptyPalette;
     OpenGLVCLContextZone aContextZone;
 
@@ -160,6 +161,7 @@ bool OpenGLSalBitmap::Create( const OpenGLTexture& rTex, long nX, long nY, long
 
 bool OpenGLSalBitmap::Create( const Size& rSize, sal_uInt16 nBits, const BitmapPalette& rBitmapPalette )
 {
+    DBG_TESTSOLARMUTEX();
     OpenGLVCLContextZone aContextZone;
 
     Destroy();
@@ -185,16 +187,19 @@ bool OpenGLSalBitmap::Create( const Size& rSize, sal_uInt16 nBits, const BitmapP
 
 bool OpenGLSalBitmap::Create( const SalBitmap& rSalBmp )
 {
+    DBG_TESTSOLARMUTEX();
     return Create( rSalBmp, rSalBmp.GetBitCount() );
 }
 
 bool OpenGLSalBitmap::Create( const SalBitmap& rSalBmp, SalGraphics* pGraphics )
 {
+    DBG_TESTSOLARMUTEX();
     return Create( rSalBmp, pGraphics ? pGraphics->GetBitCount() : rSalBmp.GetBitCount() );
 }
 
 bool OpenGLSalBitmap::Create( const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount )
 {
+    DBG_TESTSOLARMUTEX();
     OpenGLZone aZone;
 
     // check that carefully only in the debug mode
@@ -233,6 +238,7 @@ bool OpenGLSalBitmap::Create( const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount
 
 bool OpenGLSalBitmap::Create( const css::uno::Reference< css::rendering::XBitmapCanvas >& /*xBitmapCanvas*/, Size& /*rSize*/, bool /*bMask*/ )
 {
+    DBG_TESTSOLARMUTEX();
     // TODO Is this method needed?
     return false;
 }


More information about the Libreoffice-commits mailing list