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 (