sc/inc/fielduno.hxx              |    5 ++---
 sc/source/ui/unoobj/fielduno.cxx |   26 +++++++++++++++-----------
 2 files changed, 17 insertions(+), 14 deletions(-)

New commits:
commit 93059e2b164bd5eea4898519e45f1001f299c4ae
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Feb 14 10:26:18 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Feb 14 14:24:44 2023 +0000

    osl::Mutex->std::mutex in ScCellFieldsObj
    
    Change-Id: I7e9a95d093573d786b97f79f9f3b1f18c424fd8e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146973
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index fc5ae6d15446..7cf455c7bcc3 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -31,7 +31,6 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/util/XRefreshable.hpp>
 #include <com/sun/star/util/DateTime.hpp>
-#include <comphelper/interfacecontainer3.hxx>
 #include <comphelper/interfacecontainer4.hxx>
 #include <comphelper/servicehelper.hxx>
 #include <cppuhelper/implbase.hxx>
@@ -61,9 +60,9 @@ private:
     ScAddress               aCellPos;
     std::unique_ptr<ScEditSource> mpEditSource;
     /// List of refresh listeners.
-    
std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::util::XRefreshListener>>
 mpRefreshListeners;
+    
std::unique_ptr<comphelper::OInterfaceContainerHelper4<css::util::XRefreshListener>>
 mpRefreshListeners;
     /// mutex to lock the InterfaceContainerHelper
-    osl::Mutex              aMutex;
+    std::mutex              aMutex;
 
     css::uno::Reference<css::text::XTextField>
             GetObjectByIndex_Impl(sal_Int32 Index) const;
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index afc27560c1fe..2a05a24fab75 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -276,21 +276,24 @@ ScCellFieldsObj::ScCellFieldsObj(
 
 ScCellFieldsObj::~ScCellFieldsObj()
 {
-    SolarMutexGuard g;
+    {
+        SolarMutexGuard g;
 
-    if (pDocShell)
-        pDocShell->GetDocument().RemoveUnoObject(*this);
+        if (pDocShell)
+            pDocShell->GetDocument().RemoveUnoObject(*this);
 
-    mpEditSource.reset();
+        mpEditSource.reset();
+    }
 
     // increment refcount to prevent double call off dtor
     osl_atomic_increment( &m_refCount );
 
+    std::unique_lock g(aMutex);
     if (mpRefreshListeners)
     {
         lang::EventObject aEvent;
         aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
-        mpRefreshListeners->disposeAndClear(aEvent);
+        mpRefreshListeners->disposeAndClear(g, aEvent);
         mpRefreshListeners.reset();
     }
 }
@@ -383,12 +386,13 @@ void SAL_CALL ScCellFieldsObj::removeContainerListener(
 // XRefreshable
 void SAL_CALL ScCellFieldsObj::refresh(  )
 {
+    std::unique_lock g(aMutex);
     if (mpRefreshListeners)
     {
         //  Call all listeners.
         lang::EventObject aEvent;
         aEvent.Source.set(uno::Reference< util::XRefreshable >(this));
-        mpRefreshListeners->notifyEach( &util::XRefreshListener::refreshed, 
aEvent );
+        mpRefreshListeners->notifyEach( g, &util::XRefreshListener::refreshed, 
aEvent );
     }
 }
 
@@ -396,10 +400,10 @@ void SAL_CALL ScCellFieldsObj::addRefreshListener( const 
uno::Reference< util::X
 {
     if (xListener.is())
     {
-        SolarMutexGuard aGuard;
+        std::unique_lock g(aMutex);
         if (!mpRefreshListeners)
-            mpRefreshListeners.reset( new 
comphelper::OInterfaceContainerHelper3<util::XRefreshListener>(aMutex) );
-        mpRefreshListeners->addInterface(xListener);
+            mpRefreshListeners.reset( new 
comphelper::OInterfaceContainerHelper4<util::XRefreshListener>() );
+        mpRefreshListeners->addInterface(g, xListener);
     }
 }
 
@@ -407,9 +411,9 @@ void SAL_CALL ScCellFieldsObj::removeRefreshListener( const 
uno::Reference<util:
 {
     if (xListener.is())
     {
-        SolarMutexGuard aGuard;
+        std::unique_lock g(aMutex);
         if (mpRefreshListeners)
-            mpRefreshListeners->removeInterface(xListener);
+            mpRefreshListeners->removeInterface(g, xListener);
     }
 }
 

Reply via email to