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

New commits:
commit 8a1ddb42a654d77013fd107efe8c97c8a3615036
Author:     Patrick Luby <[email protected]>
AuthorDate: Sat Dec 23 09:35:06 2023 -0500
Commit:     Caolán McNamara <[email protected]>
CommitDate: Fri Dec 29 12:43:06 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 <[email protected]>
    (cherry picked from commit 0f8ad0f55e118f1f016b250de0c7940c7e21062a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161218
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx 
b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
index 6a0dd7e070ee..803022b041f6 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