sd/source/ui/accessibility/AccessibleSlideSorterView.cxx |   21 +++++++--------
 sd/source/ui/inc/AccessibleSlideSorterView.hxx           |   10 ++++---
 2 files changed, 17 insertions(+), 14 deletions(-)

New commits:
commit 4cd6cba3edcba6497220924acc6716ea6027e559
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Mar 3 08:45:45 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Mar 3 07:58:05 2023 +0000

    Revert "BaseMutex->std::mutex in AccessibleSlideSorterView"
    
    This reverts commit 64c19da4c924c45df037c075ef88d1f01a5abbe9, which
    is causing deadlock when loading
         https://bugs.documentfoundation.org/attachment.cgi?id=180272
    in gtk3
    
    Change-Id: I346fa576cbbb7355e65483ff5aba1f67cf21469a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148156
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx 
b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
index ae9a45ea73f4..4c197a71279a 100644
--- a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
+++ b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
@@ -113,7 +113,8 @@ private:
 AccessibleSlideSorterView::AccessibleSlideSorterView(
     ::sd::slidesorter::SlideSorter& rSlideSorter,
     vcl::Window* pContentWindow)
-    : mrSlideSorter(rSlideSorter),
+    : AccessibleSlideSorterViewBase(m_aMutex),
+      mrSlideSorter(rSlideSorter),
       mnClientId(0),
       mpContentWindow(pContentWindow)
 {
@@ -147,7 +148,7 @@ void AccessibleSlideSorterView::FireAccessibleEvent (
     }
 }
 
-void AccessibleSlideSorterView::disposing(std::unique_lock<std::mutex>& 
/*rGuard*/)
+void SAL_CALL AccessibleSlideSorterView::disposing()
 {
     if (mnClientId != 0)
     {
@@ -161,7 +162,7 @@ AccessibleSlideSorterObject* 
AccessibleSlideSorterView::GetAccessibleChildImplem
     sal_Int32 nIndex)
 {
     AccessibleSlideSorterObject* pResult = nullptr;
-    std::unique_lock aGuard (m_aMutex);
+    ::osl::MutexGuard aGuard (m_aMutex);
 
     if (nIndex>=0 && nIndex<mpImpl->GetVisibleChildCount())
         pResult = mpImpl->GetVisibleChild(nIndex);
@@ -171,7 +172,7 @@ AccessibleSlideSorterObject* 
AccessibleSlideSorterView::GetAccessibleChildImplem
 
 void AccessibleSlideSorterView::Destroyed()
 {
-    std::unique_lock aGuard (m_aMutex);
+    ::osl::MutexGuard aGuard (m_aMutex);
 
     // Send a disposing to all listeners.
     if (mnClientId != 0)
@@ -195,7 +196,7 @@ Reference<XAccessibleContext > SAL_CALL
 sal_Int64 SAL_CALL AccessibleSlideSorterView::getAccessibleChildCount()
 {
     ThrowIfDisposed();
-    std::unique_lock aGuard (m_aMutex);
+    ::osl::MutexGuard aGuard (m_aMutex);
     return mpImpl->GetVisibleChildCount();
 }
 
@@ -203,7 +204,7 @@ Reference<XAccessible > SAL_CALL
     AccessibleSlideSorterView::getAccessibleChild (sal_Int64 nIndex)
 {
     ThrowIfDisposed();
-    std::unique_lock aGuard (m_aMutex);
+    ::osl::MutexGuard aGuard (m_aMutex);
 
     if (nIndex<0 || nIndex>=mpImpl->GetVisibleChildCount())
         throw lang::IndexOutOfBoundsException();
@@ -322,9 +323,9 @@ void SAL_CALL 
AccessibleSlideSorterView::addAccessibleEventListener(
     if (!rxListener.is())
         return;
 
-    std::unique_lock aGuard(m_aMutex);
+    const osl::MutexGuard aGuard(m_aMutex);
 
-    if (m_bDisposed)
+    if (rBHelper.bDisposed || rBHelper.bInDispose)
     {
         uno::Reference<uno::XInterface> x (static_cast<lang::XComponent 
*>(this), uno::UNO_QUERY);
         rxListener->disposing (lang::EventObject (x));
@@ -344,7 +345,7 @@ void SAL_CALL 
AccessibleSlideSorterView::removeAccessibleEventListener(
     if (!rxListener.is())
         return;
 
-    std::unique_lock aGuard(m_aMutex);
+    const osl::MutexGuard aGuard(m_aMutex);
 
     if (mnClientId == 0)
         return;
@@ -622,7 +623,7 @@ uno::Sequence< OUString> SAL_CALL
 
 void AccessibleSlideSorterView::ThrowIfDisposed()
 {
-    if (m_bDisposed)
+    if (rBHelper.bDisposed || rBHelper.bInDispose)
     {
         SAL_WARN("sd", "Calling disposed object. Throwing exception:");
         throw lang::DisposedException ("object has been already disposed",
diff --git a/sd/source/ui/inc/AccessibleSlideSorterView.hxx 
b/sd/source/ui/inc/AccessibleSlideSorterView.hxx
index 66bcc8b5ced0..0cbaf62ed586 100644
--- a/sd/source/ui/inc/AccessibleSlideSorterView.hxx
+++ b/sd/source/ui/inc/AccessibleSlideSorterView.hxx
@@ -19,7 +19,8 @@
 
 #pragma once
 
-#include <comphelper/compbase.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase.hxx>
 #include <com/sun/star/accessibility/XAccessible.hpp>
 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
@@ -37,7 +38,7 @@ namespace accessibility {
 
 class AccessibleSlideSorterObject;
 
-typedef ::comphelper::WeakComponentImplHelper<
+typedef ::cppu::WeakComponentImplHelper<
     css::accessibility::XAccessible,
     css::accessibility::XAccessibleEventBroadcaster,
     css::accessibility::XAccessibleContext,
@@ -51,7 +52,8 @@ typedef ::comphelper::WeakComponentImplHelper<
     accessible.
 */
 class AccessibleSlideSorterView
-    : public AccessibleSlideSorterViewBase
+    : public cppu::BaseMutex,
+      public AccessibleSlideSorterViewBase
 {
 public:
     AccessibleSlideSorterView(
@@ -72,7 +74,7 @@ public:
         const css::uno::Any& rOldValue,
         const css::uno::Any& rNewValue);
 
-    virtual void disposing(std::unique_lock<std::mutex>& rGuard) override;
+    virtual void SAL_CALL disposing() override;
 
     /** Return the implementation object of the specified child.
         @param nIndex

Reply via email to