summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2023-03-03 08:45:45 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-03-03 07:58:05 +0000
commit4cd6cba3edcba6497220924acc6716ea6027e559 (patch)
tree2b04831b27c83bfd6a4deba2d61f05e43f7d6d9c /sd
parent60d9e89f5a18b437016cead0c5fb688d202bc90e (diff)
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.grandin@collabora.co.uk>
Diffstat (limited to 'sd')
-rw-r--r--sd/source/ui/accessibility/AccessibleSlideSorterView.cxx21
-rw-r--r--sd/source/ui/inc/AccessibleSlideSorterView.hxx10
2 files changed, 17 insertions, 14 deletions
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