summaryrefslogtreecommitdiff
path: root/drawinglayer
diff options
context:
space:
mode:
authorPatrick Luby <plubius@libreoffice.org>2023-12-23 09:35:06 -0500
committerPatrick Luby <plubius@libreoffice.org>2023-12-23 19:32:24 +0100
commit3e582d9e3fbed8cb94284ac1ab6105cf74eccfe0 (patch)
treef638f1474091caaafb530aeead88930631653bf8 /drawinglayer
parentea1421747985bd09ad40565da8536e857b5c2e9a (diff)
Related: tdf#158807 mutex must be locked when disposing a VirtualDevice
If the following .ppt document is opened in a debug build and the document is left open for a minute or two without changing any content, this destructor will be called on a non-main thread with the mutex unlocked: https://bugs.documentfoundation.org/attachment.cgi?id=46801 This hits an assert in VirtualDevice::ReleaseGraphics() so explicitly lock the mutex and explicitly dispose and clear the VirtualDevice instances variables. Change-Id: I5d371a4e99fca4aae2b6edc8b53eca10cb143aef Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161243 Tested-by: Jenkins Reviewed-by: Patrick Luby <plubius@libreoffice.org>
Diffstat (limited to 'drawinglayer')
-rw-r--r--drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx18
1 files changed, 18 insertions, 0 deletions
diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
index 7562459e0b70..cdda7d660e7e 100644
--- a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
+++ b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
@@ -358,6 +358,7 @@ namespace drawinglayer::primitive2d
AnimatedGraphicPrimitive2D(
const Graphic& rGraphic,
basegfx::B2DHomMatrix aTransform);
+ virtual ~AnimatedGraphicPrimitive2D();
/// data read access
const basegfx::B2DHomMatrix& getTransform() const { return maTransform; }
@@ -421,6 +422,23 @@ namespace drawinglayer::primitive2d
}
}
+ AnimatedGraphicPrimitive2D::~AnimatedGraphicPrimitive2D()
+ {
+ // Related: tdf#158807 mutex must be locked when disposing a VirtualDevice
+ // If the following .ppt document is opened in a debug build
+ // and the document is left open for a minute or two without
+ // changing any content, this destructor will be called on a
+ // non-main thread with the mutex unlocked:
+ // https://bugs.documentfoundation.org/attachment.cgi?id=46801
+ // This hits an assert in VirtualDevice::ReleaseGraphics() so
+ // explicitly lock the mutex and explicitly dispose and clear
+ // the VirtualDevice instances variables.
+ const SolarMutexGuard aSolarGuard;
+
+ maVirtualDevice.disposeAndClear();
+ maVirtualDeviceMask.disposeAndClear();
+ }
+
bool AnimatedGraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
{
// do not use 'GroupPrimitive2D::operator==' here, that would compare