chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx |   30 ++++++----
 chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx |    9 +--
 2 files changed, 24 insertions(+), 15 deletions(-)

New commits:
commit 24b3e4a5ba91d604ab68f49347ab065edaf48218
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Feb 21 12:53:16 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Feb 22 10:06:40 2023 +0000

    BaseMutex->std::mutex in ChartDataWrapper
    
    Change-Id: Ieee3fc918a5a3acdb19a1d95c475d225e6d90355
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147401
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx 
b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
index 0cde76dcf22c..c624f9074687 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
@@ -366,7 +366,6 @@ struct lcl_DateCategoriesOperator : public lcl_Operator
 
 ChartDataWrapper::ChartDataWrapper(std::shared_ptr<Chart2ModelContact> 
spChart2ModelContact)
     : m_spChart2ModelContact(std::move(spChart2ModelContact))
-    , m_aEventListenerContainer(m_aMutex)
 {
     osl_atomic_increment( &m_refCount );
     initDataAccess();
@@ -375,8 +374,7 @@ 
ChartDataWrapper::ChartDataWrapper(std::shared_ptr<Chart2ModelContact> spChart2M
 
 ChartDataWrapper::ChartDataWrapper( std::shared_ptr<Chart2ModelContact> 
spChart2ModelContact,
                                     const Reference< XChartData >& xNewData ) :
-        m_spChart2ModelContact(std::move( spChart2ModelContact )),
-        m_aEventListenerContainer( m_aMutex )
+        m_spChart2ModelContact(std::move( spChart2ModelContact ))
 {
     osl_atomic_increment( &m_refCount );
     lcl_AllOperator aOperator( xNewData );
@@ -513,13 +511,15 @@ void SAL_CALL ChartDataWrapper::setDateCategories( const 
Sequence< double >& rDa
 void SAL_CALL ChartDataWrapper::addChartDataChangeEventListener(
     const uno::Reference< css::chart::XChartDataChangeEventListener >& 
aListener )
 {
-    m_aEventListenerContainer.addInterface( aListener );
+    std::unique_lock g(m_aMutex);
+    m_aEventListenerContainer.addInterface( g, aListener );
 }
 
 void SAL_CALL ChartDataWrapper::removeChartDataChangeEventListener(
     const uno::Reference< css::chart::XChartDataChangeEventListener >& 
aListener )
 {
-    m_aEventListenerContainer.removeInterface( aListener );
+    std::unique_lock g(m_aMutex);
+    m_aEventListenerContainer.removeInterface( g, aListener );
 }
 
 double SAL_CALL ChartDataWrapper::getNotANumber()
@@ -537,20 +537,23 @@ sal_Bool SAL_CALL ChartDataWrapper::isNotANumber( double 
nNumber )
 // ____ XComponent ____
 void SAL_CALL ChartDataWrapper::dispose()
 {
-    m_aEventListenerContainer.disposeAndClear( lang::EventObject( static_cast< 
::cppu::OWeakObject* >( this )));
+    std::unique_lock g(m_aMutex);
+    m_aEventListenerContainer.disposeAndClear( g, lang::EventObject( 
static_cast< ::cppu::OWeakObject* >( this )));
     m_xDataAccess=nullptr;
 }
 
 void SAL_CALL ChartDataWrapper::addEventListener(
     const uno::Reference< lang::XEventListener > & xListener )
 {
-    m_aEventListenerContainer.addInterface( xListener );
+    std::unique_lock g(m_aMutex);
+    m_aEventListenerContainer.addInterface( g, xListener );
 }
 
 void SAL_CALL ChartDataWrapper::removeEventListener(
     const uno::Reference< lang::XEventListener >& aListener )
 {
-    m_aEventListenerContainer.removeInterface( aListener );
+    std::unique_lock g(m_aMutex);
+    m_aEventListenerContainer.removeInterface( g, aListener );
 }
 
 // ____ XEventListener ____
@@ -560,7 +563,8 @@ void SAL_CALL ChartDataWrapper::disposing( const 
lang::EventObject& /* Source */
 
 void ChartDataWrapper::fireChartDataChangeEvent( 
css::chart::ChartDataChangeEvent& aEvent )
 {
-    if( ! m_aEventListenerContainer.getLength() )
+    std::unique_lock g(m_aMutex);
+    if( ! m_aEventListenerContainer.getLength(g) )
         return;
 
     uno::Reference< uno::XInterface > xSrc( static_cast< cppu::OWeakObject* >( 
this ));
@@ -568,7 +572,13 @@ void ChartDataWrapper::fireChartDataChangeEvent( 
css::chart::ChartDataChangeEven
     if( xSrc.is() )
         aEvent.Source = xSrc;
 
-    m_aEventListenerContainer.notifyEach( 
&css::chart::XChartDataChangeEventListener::chartDataChanged, aEvent );
+    m_aEventListenerContainer.forEach( g,
+        [&aEvent](const uno::Reference<css::lang::XEventListener>& l)
+        {
+            uno::Reference<css::chart::XChartDataChangeEventListener> cl(l, 
uno::UNO_QUERY);
+            if (cl)
+                cl->chartDataChanged(aEvent);
+        });
 }
 
 void ChartDataWrapper::switchToInternalDataProvider()
diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx 
b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx
index 854602a23965..3c6602d4e028 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.hxx
@@ -18,9 +18,8 @@
  */
 #pragma once
 
-#include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/implbase.hxx>
-#include <comphelper/interfacecontainer2.hxx>
+#include <comphelper/interfacecontainer4.hxx>
 #include <com/sun/star/chart2/XAnyDescriptionAccess.hpp>
 #include <com/sun/star/chart/XDateCategories.hpp>
 #include <com/sun/star/lang/XComponent.hpp>
@@ -35,7 +34,7 @@ namespace chart::wrapper
 class Chart2ModelContact;
 struct lcl_Operator;
 
-class ChartDataWrapper final : public cppu::BaseMutex, public
+class ChartDataWrapper final : public
     ::cppu::WeakImplHelper<
     css::chart2::XAnyDescriptionAccess,
     css::chart::XDateCategories,
@@ -107,10 +106,10 @@ private:
     void initDataAccess();
     void applyData( lcl_Operator& rDataOperator );
 
+    std::mutex m_aMutex;
     css::uno::Reference< css::chart2::XAnyDescriptionAccess > m_xDataAccess;
-
     std::shared_ptr< Chart2ModelContact >   m_spChart2ModelContact;
-    ::comphelper::OInterfaceContainerHelper2      m_aEventListenerContainer;
+    ::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> 
m_aEventListenerContainer;
 };
 
 } //  namespace chart::wrapper

Reply via email to