drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx |   18 +++++++++++
 1 file changed, 18 insertions(+)

New commits:
commit 3e582d9e3fbed8cb94284ac1ab6105cf74eccfe0
Author:     Patrick Luby <plub...@libreoffice.org>
AuthorDate: Sat Dec 23 09:35:06 2023 -0500
Commit:     Patrick Luby <plub...@libreoffice.org>
CommitDate: Sat Dec 23 19:32:24 2023 +0100

    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 <plub...@libreoffice.org>

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

Reply via email to