dbaccess/source/ui/browser/sbagrid.cxx |   37 ++++++++++-------
 dbaccess/source/ui/inc/sbagrid.hxx     |    6 +-
 include/svx/fmgridif.hxx               |   14 +++---
 svx/source/fmcomp/fmgridif.cxx         |   69 +++++++++++++++++++--------------
 4 files changed, 72 insertions(+), 54 deletions(-)

New commits:
commit c2c22a8ca6e04779c4daada73003b03c963b4cfd
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Feb 21 10:02:50 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Feb 21 10:39:38 2023 +0000

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

diff --git a/dbaccess/source/ui/browser/sbagrid.cxx 
b/dbaccess/source/ui/browser/sbagrid.cxx
index 03b81526a372..99ee5c30eb73 100644
--- a/dbaccess/source/ui/browser/sbagrid.cxx
+++ b/dbaccess/source/ui/browser/sbagrid.cxx
@@ -237,7 +237,6 @@ void SAL_CALL SbaXGridControl::dispose()
 // SbaXGridPeer
 SbaXGridPeer::SbaXGridPeer(const Reference< XComponentContext >& _rM)
 : FmXGridPeer(_rM)
-,m_aStatusListeners(m_aMutex)
 {
 }
 
@@ -247,10 +246,11 @@ SbaXGridPeer::~SbaXGridPeer()
 
 void SAL_CALL SbaXGridPeer::dispose()
 {
-    EventObject aEvt(*this);
-
-    m_aStatusListeners.disposeAndClear(aEvt);
-
+    {
+        std::unique_lock g(m_aMutex);
+        EventObject aEvt(*this);
+        m_aStatusListeners.disposeAndClear(g, aEvt);
+    }
     FmXGridPeer::dispose();
 }
 
@@ -275,12 +275,13 @@ void SbaXGridPeer::NotifyStatusChanged(const 
css::util::URL& _rUrl, const Refere
         xControl->statusChanged(aEvt);
     else
     {
-        ::comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener> 
* pIter
-            = m_aStatusListeners.getContainer(_rUrl);
+        std::unique_lock g(m_aMutex);
+        ::comphelper::OInterfaceContainerHelper4<css::frame::XStatusListener> 
* pIter
+            = m_aStatusListeners.getContainer(g, _rUrl);
 
         if (pIter)
         {
-            pIter->notifyEach( &XStatusListener::statusChanged, aEvt );
+            pIter->notifyEach( g, &XStatusListener::statusChanged, aEvt );
         }
     }
 }
@@ -439,20 +440,24 @@ void SAL_CALL SbaXGridPeer::dispatch(const URL& aURL, 
const Sequence< PropertyVa
 
 void SAL_CALL SbaXGridPeer::addStatusListener(const Reference< 
css::frame::XStatusListener > & xControl, const css::util::URL& aURL)
 {
-    ::comphelper::OInterfaceContainerHelper3< css::frame::XStatusListener >* 
pCont
-        = m_aStatusListeners.getContainer(aURL);
-    if (!pCont)
-        m_aStatusListeners.addInterface(aURL,xControl);
-    else
-        pCont->addInterface(xControl);
+    {
+        std::unique_lock g(m_aMutex);
+        ::comphelper::OInterfaceContainerHelper4< css::frame::XStatusListener 
>* pCont
+            = m_aStatusListeners.getContainer(g, aURL);
+        if (!pCont)
+            m_aStatusListeners.addInterface(g, aURL,xControl);
+        else
+            pCont->addInterface(g, xControl);
+    }
     NotifyStatusChanged(aURL, xControl);
 }
 
 void SAL_CALL SbaXGridPeer::removeStatusListener(const Reference< 
css::frame::XStatusListener > & xControl, const css::util::URL& aURL)
 {
-    ::comphelper::OInterfaceContainerHelper3< css::frame::XStatusListener >* 
pCont = m_aStatusListeners.getContainer(aURL);
+    std::unique_lock g(m_aMutex);
+    ::comphelper::OInterfaceContainerHelper4< css::frame::XStatusListener >* 
pCont = m_aStatusListeners.getContainer(g, aURL);
     if ( pCont )
-        pCont->removeInterface(xControl);
+        pCont->removeInterface(g, xControl);
 }
 
 Sequence< Type > SAL_CALL SbaXGridPeer::getTypes()
diff --git a/dbaccess/source/ui/inc/sbagrid.hxx 
b/dbaccess/source/ui/inc/sbagrid.hxx
index 22af70834425..4c0f37654647 100644
--- a/dbaccess/source/ui/inc/sbagrid.hxx
+++ b/dbaccess/source/ui/inc/sbagrid.hxx
@@ -25,7 +25,7 @@
 
 #include <com/sun/star/frame/XDispatch.hpp>
 #include <com/sun/star/util/URL.hpp>
-#include <comphelper/multiinterfacecontainer3.hxx>
+#include <comphelper/multiinterfacecontainer4.hxx>
 #include <comphelper/servicehelper.hxx>
 #include <comphelper/uno3.hxx>
 #include "sbamultiplex.hxx"
@@ -93,8 +93,8 @@ namespace dbaui
                 :public FmXGridPeer
                 ,public css::frame::XDispatch
     {
-        comphelper::OMultiTypeInterfaceContainerHelperVar3< 
css::frame::XStatusListener,
-            css::util::URL, SbaURLCompare>  m_aStatusListeners;
+        comphelper::OMultiTypeInterfaceContainerHelperVar4< css::util::URL, 
css::frame::XStatusListener,
+            SbaURLCompare>  m_aStatusListeners;
 
     public:
         SbaXGridPeer(const css::uno::Reference< css::uno::XComponentContext 
>&);
diff --git a/include/svx/fmgridif.hxx b/include/svx/fmgridif.hxx
index e3cce3952b3a..f978b70b546e 100644
--- a/include/svx/fmgridif.hxx
+++ b/include/svx/fmgridif.hxx
@@ -44,7 +44,7 @@
 #include <vcl/wintypes.hxx>
 #include <toolkit/controls/unocontrol.hxx>
 #include <toolkit/awt/vclxwindow.hxx>
-#include <comphelper/interfacecontainer3.hxx>
+#include <comphelper/interfacecontainer4.hxx>
 #include <comphelper/servicehelper.hxx>
 #include <comphelper/uno3.hxx>
 #include <cppuhelper/implbase.hxx>
@@ -342,16 +342,16 @@ class SAL_WARN_UNUSED SVXCORE_DLLPUBLIC FmXGridPeer:
 {
 protected:
     css::uno::Reference< css::uno::XComponentContext >    m_xContext;
-    ::osl::Mutex                                          m_aMutex;
+    std::mutex                                            m_aMutex;
 
 private:
     css::uno::Reference< css::container::XIndexContainer >    m_xColumns;
     css::uno::Reference< css::sdbc::XRowSet >                 m_xCursor;
-    ::comphelper::OInterfaceContainerHelper3<css::util::XModifyListener> 
m_aModifyListeners;
-    ::comphelper::OInterfaceContainerHelper3<css::form::XUpdateListener> 
m_aUpdateListeners;
-    
::comphelper::OInterfaceContainerHelper3<css::container::XContainerListener> 
m_aContainerListeners;
-    
::comphelper::OInterfaceContainerHelper3<css::view::XSelectionChangeListener> 
m_aSelectionListeners;
-    ::comphelper::OInterfaceContainerHelper3<css::form::XGridControlListener> 
m_aGridControlListeners;
+    ::comphelper::OInterfaceContainerHelper4<css::util::XModifyListener> 
m_aModifyListeners;
+    ::comphelper::OInterfaceContainerHelper4<css::form::XUpdateListener> 
m_aUpdateListeners;
+    
::comphelper::OInterfaceContainerHelper4<css::container::XContainerListener> 
m_aContainerListeners;
+    
::comphelper::OInterfaceContainerHelper4<css::view::XSelectionChangeListener> 
m_aSelectionListeners;
+    ::comphelper::OInterfaceContainerHelper4<css::form::XGridControlListener> 
m_aGridControlListeners;
 
     OUString                m_aMode;
     sal_Int32               m_nCursorListening;
diff --git a/svx/source/fmcomp/fmgridif.cxx b/svx/source/fmcomp/fmgridif.cxx
index 05ccd00c75c9..f78f6bb2100f 100644
--- a/svx/source/fmcomp/fmgridif.cxx
+++ b/svx/source/fmcomp/fmgridif.cxx
@@ -1020,26 +1020,23 @@ void FmXGridPeer::GridListenerDelegator::columnChanged()
 
 void FmXGridPeer::selectionChanged()
 {
+    std::unique_lock g(m_aMutex);
     EventObject aSource;
     aSource.Source = static_cast< ::cppu::OWeakObject* >(this);
-    m_aSelectionListeners.notifyEach( 
&XSelectionChangeListener::selectionChanged, aSource);
+    m_aSelectionListeners.notifyEach( g, 
&XSelectionChangeListener::selectionChanged, aSource);
 }
 
 
 void FmXGridPeer::columnChanged()
 {
+    std::unique_lock g(m_aMutex);
     EventObject aEvent( *this );
-    m_aGridControlListeners.notifyEach( &XGridControlListener::columnChanged, 
aEvent );
+    m_aGridControlListeners.notifyEach( g, 
&XGridControlListener::columnChanged, aEvent );
 }
 
 
 FmXGridPeer::FmXGridPeer(const Reference< XComponentContext >& _rxContext)
             :m_xContext(_rxContext)
-            ,m_aModifyListeners(m_aMutex)
-            ,m_aUpdateListeners(m_aMutex)
-            ,m_aContainerListeners(m_aMutex)
-            ,m_aSelectionListeners(m_aMutex)
-            ,m_aGridControlListeners(m_aMutex)
             ,m_aMode("DataMode")
             ,m_nCursorListening(0)
             ,m_bInterceptingDispatch(false)
@@ -1124,13 +1121,15 @@ void FmXGridPeer::disposing(const EventObject& e)
 
 void FmXGridPeer::addModifyListener(const Reference< 
css::util::XModifyListener >& l)
 {
-    m_aModifyListeners.addInterface( l );
+    std::unique_lock g(m_aMutex);
+    m_aModifyListeners.addInterface( g, l );
 }
 
 
 void FmXGridPeer::removeModifyListener(const Reference< 
css::util::XModifyListener >& l)
 {
-    m_aModifyListeners.removeInterface( l );
+    std::unique_lock g(m_aMutex);
+    m_aModifyListeners.removeInterface( g, l );
 }
 
 
@@ -1312,9 +1311,10 @@ Sequence< Any > SAL_CALL FmXGridPeer::queryFieldData( 
sal_Int32 nRow, const Type
 
 void FmXGridPeer::CellModified()
 {
+    std::unique_lock g(m_aMutex);
     EventObject aEvt;
     aEvt.Source = static_cast< ::cppu::OWeakObject* >(this);
-    m_aModifyListeners.notifyEach( &XModifyListener::modified, aEvt );
+    m_aModifyListeners.notifyEach( g, &XModifyListener::modified, aEvt );
 }
 
 // XPropertyChangeListener
@@ -1433,13 +1433,15 @@ void FmXGridPeer::propertyChange(const 
PropertyChangeEvent& evt)
 
 void FmXGridPeer::addUpdateListener(const Reference< XUpdateListener >& l)
 {
-    m_aUpdateListeners.addInterface(l);
+    std::unique_lock g(m_aMutex);
+    m_aUpdateListeners.addInterface(g, l);
 }
 
 
 void FmXGridPeer::removeUpdateListener(const Reference< XUpdateListener >& l)
 {
-    m_aUpdateListeners.removeInterface(l);
+    std::unique_lock g(m_aMutex);
+    m_aUpdateListeners.removeInterface(g, l);
 }
 
 
@@ -1449,8 +1451,9 @@ sal_Bool FmXGridPeer::commit()
     if (!m_xCursor.is() || !pGrid)
         return true;
 
+    std::unique_lock g(m_aMutex);
     EventObject aEvt(static_cast< ::cppu::OWeakObject* >(this));
-    ::comphelper::OInterfaceIteratorHelper3 aIter(m_aUpdateListeners);
+    ::comphelper::OInterfaceIteratorHelper4 aIter(g, m_aUpdateListeners);
     bool bCancel = false;
     while (aIter.hasMoreElements() && !bCancel)
         if ( !aIter.next()->approveUpdate( aEvt ) )
@@ -1460,7 +1463,7 @@ sal_Bool FmXGridPeer::commit()
         bCancel = !pGrid->commit();
 
     if (!bCancel)
-        m_aUpdateListeners.notifyEach( &XUpdateListener::updated, aEvt );
+        m_aUpdateListeners.notifyEach( g, &XUpdateListener::updated, aEvt );
     return !bCancel;
 }
 
@@ -2036,12 +2039,14 @@ Any FmXGridPeer::getProperty( const OUString& 
_rPropertyName )
 
 void FmXGridPeer::dispose()
 {
-    EventObject aEvt;
-    aEvt.Source = static_cast< ::cppu::OWeakObject* >(this);
-    m_aModifyListeners.disposeAndClear(aEvt);
-    m_aUpdateListeners.disposeAndClear(aEvt);
-    m_aContainerListeners.disposeAndClear(aEvt);
-
+    {
+        std::unique_lock g(m_aMutex);
+        EventObject aEvt;
+        aEvt.Source = static_cast< ::cppu::OWeakObject* >(this);
+        m_aModifyListeners.disposeAndClear(g, aEvt);
+        m_aUpdateListeners.disposeAndClear(g, aEvt);
+        m_aContainerListeners.disposeAndClear(g, aEvt);
+    }
     // release all interceptors
     Reference< XDispatchProviderInterceptor > xInterceptor( 
m_xFirstDispatchInterceptor );
     m_xFirstDispatchInterceptor.clear();
@@ -2095,12 +2100,14 @@ void FmXGridPeer::dispose()
 
 void FmXGridPeer::addContainerListener(const Reference< XContainerListener >& 
l)
 {
-    m_aContainerListeners.addInterface( l );
+    std::unique_lock g(m_aMutex);
+    m_aContainerListeners.addInterface( g, l );
 }
 
 void FmXGridPeer::removeContainerListener(const Reference< XContainerListener 
>& l)
 {
-    m_aContainerListeners.removeInterface( l );
+    std::unique_lock g(m_aMutex);
+    m_aContainerListeners.removeInterface( g, l );
 }
 
 // css::data::XDatabaseCursorSupplier
@@ -2202,13 +2209,15 @@ void FmXGridPeer::setRowSet(const Reference< XRowSet >& 
_rDatabaseCursor)
 
 void SAL_CALL FmXGridPeer::addGridControlListener( const Reference< 
XGridControlListener >& _listener )
 {
-    m_aGridControlListeners.addInterface( _listener );
+    std::unique_lock g(m_aMutex);
+    m_aGridControlListeners.addInterface( g, _listener );
 }
 
 
 void SAL_CALL FmXGridPeer::removeGridControlListener( const Reference< 
XGridControlListener >& _listener )
 {
-    m_aGridControlListeners.removeInterface( _listener );
+    std::unique_lock g(m_aMutex);
+    m_aGridControlListeners.removeInterface( g, _listener );
 }
 
 
@@ -2387,7 +2396,8 @@ void FmXGridPeer::columnVisible(DbGridColumn const * 
pColumn)
     aEvt.Accessor <<= _nIndex;
     aEvt.Element  <<= xControl;
 
-    m_aContainerListeners.notifyEach( &XContainerListener::elementInserted, 
aEvt );
+    std::unique_lock g(m_aMutex);
+    m_aContainerListeners.notifyEach( g, &XContainerListener::elementInserted, 
aEvt );
 }
 
 
@@ -2402,7 +2412,8 @@ void FmXGridPeer::columnHidden(DbGridColumn const * 
pColumn)
     aEvt.Accessor <<= _nIndex;
     aEvt.Element  <<= xControl;
 
-    m_aContainerListeners.notifyEach( &XContainerListener::elementRemoved, 
aEvt );
+    std::unique_lock g(m_aMutex);
+    m_aContainerListeners.notifyEach( g, &XContainerListener::elementRemoved, 
aEvt );
 }
 
 
@@ -2586,13 +2597,15 @@ Any SAL_CALL FmXGridPeer::getSelection(  )
 
 void SAL_CALL FmXGridPeer::addSelectionChangeListener( const Reference< 
XSelectionChangeListener >& _rxListener )
 {
-    m_aSelectionListeners.addInterface( _rxListener );
+    std::unique_lock g(m_aMutex);
+    m_aSelectionListeners.addInterface( g, _rxListener );
 }
 
 
 void SAL_CALL FmXGridPeer::removeSelectionChangeListener( const Reference< 
XSelectionChangeListener >& _rxListener )
 {
-    m_aSelectionListeners.removeInterface( _rxListener );
+    std::unique_lock g(m_aMutex);
+    m_aSelectionListeners.removeInterface( g, _rxListener );
 }
 
 

Reply via email to