diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-07-25 17:02:21 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-07-26 09:03:37 +0200 |
commit | 919ccaba419531d689231b76a43ab29c6a9ec65a (patch) | |
tree | 404ef0245afc5997b57776d2e2a89bdd8e6e71f0 /vcl/opengl/salbmp.cxx | |
parent | 07ad18ed6d90773a1e8120057929fa3a1dff2665 (diff) |
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.
Change-Id: I88203c12b4e7a5f2b689928c01e2ba953c5b13c5
Reviewed-on: https://gerrit.libreoffice.org/57970
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Diffstat (limited to 'vcl/opengl/salbmp.cxx')
-rw-r--r-- | vcl/opengl/salbmp.cxx | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/vcl/opengl/salbmp.cxx b/vcl/opengl/salbmp.cxx index caade8ceacce..33fc720ef497 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; } |