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())

Reply via email to