summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2023-02-20 11:46:41 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-02-20 12:28:40 +0000
commitc1131cdab3eb21a14822409c05697a91b4beda3e (patch)
tree96849131fad3814cbdd936eaa3d5c9da16aca0ad
parent690733f6a78e9f5bcccc2e3fbb6761257cf24014 (diff)
tdf#153754 "Insert" - "Chart" in Writer hangs
Revert "osl::Mutex->std::mutex in SwAccessibleMap" This reverts commit 2442fc19400e0e82b0375d3772a2e0b34a511600. We have a recursive call stack that does not look easy to fix #7 0x00007fffc2214c18 in std::unique_lock<std::mutex>::unique_lock(std::mutex&) (this=0x7fffffff1c28, __m=...) at /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/unique_lock.h:69 #8 0x00007fffc22b6c06 in SwAccessibleMap::AppendEvent(SwAccessibleEvent_Impl const&) (this=0x55555b7e3aa0, rEvent=...) at sw/source/core/access/accmap.cxx:980 #9 0x00007fffc22b7f8c in SwAccessibleMap::InvalidateCursorPosition(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible> const&) (this=0x55555b7e3aa0, rAcc=uno::Reference to (SwAccessibleParagraph *) 0x55555b7cff00) at sw/source/core/access/accmap.cxx:1117 #10 0x00007fffc22bd595 in SwAccessibleMap::GetContext(SwFrame const*, bool) (this=0x55555b7e3aa0, pFrame=0x55555b6e68a0, bCreate=true) at sw/source/core/access/accmap.cxx:1924 #11 0x00007fffc22bd83f in SwAccessibleMap::GetContextImpl(SwFrame const*, bool) (this=0x55555b7e3aa0, pFrame=0x55555b6e68a0, bCreate=true) at sw/source/core/access/accmap.cxx:1935 #12 0x00007fffc228c8e8 in SwAccessibleContext::InvalidateChildPosOrSize(sw::access::SwAccessibleChild const&, SwRect const&) (this=0x55555b7e0630, rChildFrameOrObj=..., rOldFrame=SwRect = {...}) at sw/source/core/access/acccontext.cxx:1227 #13 0x00007fffc22b5540 in SwAccessibleMap::FireEvent(SwAccessibleEvent_Impl const&) (this=0x55555b7e3aa0, rEvent=...) at sw/source/core/access/accmap.cxx:936 #14 0x00007fffc22b8216 in SwAccessibleMap::FireEvents() (this=0x55555b7e3aa0) at sw/source/core/access/accmap.cxx:3019 Change-Id: If058cecf7bc7503d0767526c07c0ca2840b3638a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147314 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/inc/accmap.hxx13
-rw-r--r--sw/source/core/access/accmap.cxx17
2 files changed, 11 insertions, 19 deletions
diff --git a/sw/inc/accmap.hxx b/sw/inc/accmap.hxx
index df5f697841e2..0090d7837876 100644
--- a/sw/inc/accmap.hxx
+++ b/sw/inc/accmap.hxx
@@ -20,17 +20,17 @@
#define INCLUDED_SW_INC_ACCMAP_HXX
#include <cppuhelper/weakref.hxx>
-#include <osl/mutex.hxx>
-#include <o3tl/typed_flags_set.hxx>
-#include <o3tl/sorted_vector.hxx>
#include <rtl/ref.hxx>
+#include <osl/mutex.hxx>
#include <svx/IAccessibleViewForwarder.hxx>
#include <svx/IAccessibleParent.hxx>
+
#include <svx/AccessibleControlShape.hxx>
+#include <o3tl/typed_flags_set.hxx>
-#include <memory>
-#include <mutex>
#include <vector>
+#include <memory>
+#include <o3tl/sorted_vector.hxx>
class SwAccessibleParagraph;
class SwViewShell;
@@ -90,7 +90,7 @@ class SwAccessibleMap final : public ::accessibility::IAccessibleViewForwarder,
, public std::enable_shared_from_this<SwAccessibleMap>
{
mutable ::osl::Mutex maMutex;
- std::mutex maEventMutex;
+ ::osl::Mutex maEventMutex;
std::unique_ptr<SwAccessibleContextMap_Impl> mpFrameMap;
std::unique_ptr<SwAccessibleShapeMap_Impl> mpShapeMap;
SwShapeList_Impl mvShapes;
@@ -115,7 +115,6 @@ class SwAccessibleMap final : public ::accessibility::IAccessibleViewForwarder,
void FireEvent( const SwAccessibleEvent_Impl& rEvent );
- void AppendEvent( std::unique_lock<std::mutex>& rGuard, const SwAccessibleEvent_Impl& rEvent );
void AppendEvent( const SwAccessibleEvent_Impl& rEvent );
void InvalidateCursorPosition( const css::uno::Reference<css::accessibility::XAccessible>& rAcc );
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index a22a0219bd81..46c0dbaf0714 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -977,14 +977,7 @@ void SwAccessibleMap::FireEvent( const SwAccessibleEvent_Impl& rEvent )
void SwAccessibleMap::AppendEvent( const SwAccessibleEvent_Impl& rEvent )
{
- std::unique_lock aGuard(maEventMutex);
- AppendEvent(aGuard, rEvent);
-}
-
-void SwAccessibleMap::AppendEvent( std::unique_lock<std::mutex>& rGuard, const SwAccessibleEvent_Impl& rEvent )
-{
- assert(rGuard.mutex() == &maEventMutex);
- (void)rGuard;
+ osl::MutexGuard aGuard( maEventMutex );
if( !mpEvents )
mpEvents.reset(new SwAccessibleEventList_Impl);
@@ -1709,7 +1702,7 @@ SwAccessibleMap::~SwAccessibleMap()
mpPreview.reset();
{
- std::unique_lock aGuard( maEventMutex );
+ osl::MutexGuard aGuard( maEventMutex );
assert(!mpEvents);
assert(!mpEventMap);
mpEventMap.reset();
@@ -2254,7 +2247,7 @@ void SwAccessibleMap::A11yDispose( const SwFrame *pFrame,
// remove events stored for the frame
{
- std::unique_lock aGuard( maEventMutex );
+ osl::MutexGuard aGuard( maEventMutex );
if( mpEvents )
{
SwAccessibleEventMap_Impl::iterator aIter =
@@ -2263,7 +2256,7 @@ void SwAccessibleMap::A11yDispose( const SwFrame *pFrame,
{
SwAccessibleEvent_Impl aEvent(
SwAccessibleEvent_Impl::DISPOSE, aFrameOrObj );
- AppendEvent( aGuard, aEvent );
+ AppendEvent( aEvent );
}
}
}
@@ -3005,7 +2998,7 @@ bool SwAccessibleMap::IsPageSelected( const SwPageFrame *pPageFrame ) const
void SwAccessibleMap::FireEvents()
{
{
- std::unique_lock aGuard( maEventMutex );
+ osl::MutexGuard aGuard( maEventMutex );
if( mpEvents )
{
if (mpEvents->IsFiring())