sw/inc/accmap.hxx | 13 ++++++------- sw/source/core/access/accmap.cxx | 17 +++++------------ 2 files changed, 11 insertions(+), 19 deletions(-)
New commits: commit c1131cdab3eb21a14822409c05697a91b4beda3e Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Mon Feb 20 11:46:41 2023 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Feb 20 12:28:40 2023 +0000 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.gran...@collabora.co.uk> 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())