editeng/source/accessibility/AccessibleContextBase.cxx    |    2 ++
 sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx |    2 ++
 svx/source/accessibility/AccessibleShape.cxx              |    4 ++++
 svx/source/accessibility/AccessibleShapeTreeInfo.cxx      |    7 +++++--
 4 files changed, 13 insertions(+), 2 deletions(-)

New commits:
commit d309298d1f70f4ffbf699b1aa1b2bfe08be8c4ef
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu May 11 09:27:14 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu May 11 10:50:03 2023 +0200

    tdf#155235 Draw crashes on close: SIGSEGV in SalInstance:GetYieldMutex()
    
    This is a regression from
        commit 3b7db802731826b6cc3b55100470b0c61c1f2dfa
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Thu May 4 10:06:14 2023 +0200
        tdf#105404 [API CHANGE] add index to accessiblity change event
    
    The list of children in DocumentFocusListener is getting out of sync
    because something is not sending add/remove events for accessible
    objects, a problem which was hidden before the commit above.
    
    I can't find the add/remove problem, so do the next best thing - fix the
    dispose methods of various accessible objects so that they clear
    references to other objects, which results in the relevant objects being
    destructed in an order which does not lead to crashes.
    
    Change-Id: Iac7f48d6e3f2bdf30edb5c7fd3c5de861aec4b7a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151657
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/editeng/source/accessibility/AccessibleContextBase.cxx 
b/editeng/source/accessibility/AccessibleContextBase.cxx
index 6ef2fe654548..8dad5b1344b4 100644
--- a/editeng/source/accessibility/AccessibleContextBase.cxx
+++ b/editeng/source/accessibility/AccessibleContextBase.cxx
@@ -404,6 +404,8 @@ void SAL_CALL AccessibleContextBase::disposing()
         comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( 
mnClientId, *this );
         mnClientId =  0;
     }
+    mxParent.clear();
+    mxRelationSet.clear();
 }
 
 
diff --git a/sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx 
b/sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx
index 410d75deabe2..61d4bd154ee3 100644
--- a/sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx
+++ b/sd/source/ui/accessibility/AccessibleDocumentViewBase.cxx
@@ -480,6 +480,8 @@ void AccessibleDocumentViewBase::impl_dispose()
     mxController = nullptr;
 
     maShapeTreeInfo.SetDocumentWindow (nullptr);
+    maShapeTreeInfo.dispose();
+    mxAccessibleOLEObject.clear();
 }
 
 //=====  XEventListener  ======================================================
diff --git a/svx/source/accessibility/AccessibleShape.cxx 
b/svx/source/accessibility/AccessibleShape.cxx
index ec9ba6efa410..e3116a9762b7 100644
--- a/svx/source/accessibility/AccessibleShape.cxx
+++ b/svx/source/accessibility/AccessibleShape.cxx
@@ -887,6 +887,10 @@ void AccessibleShape::disposing (const lang::EventObject& 
aEvent)
     {
         TOOLS_WARN_EXCEPTION("svx", "caught exception while disposing");
     }
+    mpChildrenManager.reset();
+    mxShape.clear();
+    maShapeTreeInfo.dispose();
+    mpText.reset();
 }
 
 // document::XShapeEventListener
diff --git a/svx/source/accessibility/AccessibleShapeTreeInfo.cxx 
b/svx/source/accessibility/AccessibleShapeTreeInfo.cxx
index df6136f94528..70fd6e44d820 100644
--- a/svx/source/accessibility/AccessibleShapeTreeInfo.cxx
+++ b/svx/source/accessibility/AccessibleShapeTreeInfo.cxx
@@ -74,8 +74,11 @@ AccessibleShapeTreeInfo& AccessibleShapeTreeInfo::operator= 
(const AccessibleSha
 
 AccessibleShapeTreeInfo::~AccessibleShapeTreeInfo()
 {
-    SolarMutexGuard g;
-    mpWindow.reset();
+    if (mpWindow)
+    {
+        SolarMutexGuard g;
+        mpWindow.reset();
+    }
 }
 
 void AccessibleShapeTreeInfo::SetDocumentWindow (

Reply via email to