configmgr/source/configurationprovider.cxx |   59 +++++++++++++----------------
 1 file changed, 28 insertions(+), 31 deletions(-)

New commits:
commit a61951a3a21c6457334f78f657806c1167dbf339
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Mon Feb 20 20:08:30 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Feb 21 09:12:17 2023 +0000

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

diff --git a/configmgr/source/configurationprovider.cxx 
b/configmgr/source/configurationprovider.cxx
index b8bdcb4262f2..ddff084a1b03 100644
--- a/configmgr/source/configurationprovider.cxx
+++ b/configmgr/source/configurationprovider.cxx
@@ -39,8 +39,7 @@
 #include <com/sun/star/util/XRefreshListener.hpp>
 #include <com/sun/star/util/XRefreshable.hpp>
 #include <cppu/unotype.hxx>
-#include <cppuhelper/basemutex.hxx>
-#include <cppuhelper/compbase.hxx>
+#include <comphelper/compbase.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <cppuhelper/weak.hxx>
 #include <osl/mutex.hxx>
@@ -74,19 +73,18 @@ void badNodePath() {
 }
 
 typedef
-    cppu::WeakComponentImplHelper<
+    comphelper::WeakComponentImplHelper<
         css::lang::XServiceInfo, css::lang::XMultiServiceFactory,
         css::util::XRefreshable, css::util::XFlushable,
         css::lang::XLocalizable >
     ServiceBase;
 
-class Service:
-    private cppu::BaseMutex, public ServiceBase
+class Service : public ServiceBase
 {
 public:
     explicit Service(
         const css::uno::Reference< css::uno::XComponentContext >& context):
-        ServiceBase(m_aMutex), context_(context), default_(true),
+        context_(context), default_(true),
         lock_( lock() )
     {
         assert(context.is());
@@ -95,7 +93,7 @@ public:
     Service(
         const css::uno::Reference< css::uno::XComponentContext >& context,
         OUString locale):
-        ServiceBase(m_aMutex), context_(context), locale_(std::move(locale)),
+        context_(context), locale_(std::move(locale)),
         default_(false),
         lock_( lock() )
     {
@@ -108,7 +106,7 @@ private:
 
     virtual ~Service() override {}
 
-    virtual void SAL_CALL disposing() override { flushModifications(); }
+    virtual void disposing(std::unique_lock<std::mutex>& rGuard) override { 
flushModifications(rGuard); }
 
     virtual OUString SAL_CALL getImplementationName() override
     {
@@ -159,12 +157,14 @@ private:
 
     virtual css::lang::Locale SAL_CALL getLocale() override;
 
-    void flushModifications() const;
+    void flushModifications(std::unique_lock<std::mutex>& rGuard) const;
 
     css::uno::Reference< css::uno::XComponentContext > context_;
     OUString locale_;
     bool default_;
     std::shared_ptr<osl::Mutex> lock_;
+    comphelper::OInterfaceContainerHelper4<css::util::XRefreshListener> 
maRefreshListeners;
+    comphelper::OInterfaceContainerHelper4<css::util::XFlushListener> 
maFlushListeners;
 };
 
 css::uno::Reference< css::uno::XInterface > Service::createInstance(
@@ -271,49 +271,48 @@ css::uno::Sequence< OUString > 
Service::getAvailableServiceNames()
 
 void Service::refresh() {
     //TODO
-    cppu::OInterfaceContainerHelper * cont = rBHelper.getContainer(
-        cppu::UnoType< css::util::XRefreshListener >::get());
-    if (cont != nullptr) {
+    std::unique_lock g(m_aMutex);
+    if (maRefreshListeners.getLength(g)) {
         css::lang::EventObject ev(static_cast< cppu::OWeakObject * >(this));
-        cont->notifyEach(&css::util::XRefreshListener::refreshed, ev);
+        maRefreshListeners.notifyEach(g, 
&css::util::XRefreshListener::refreshed, ev);
     }
 }
 
 void Service::addRefreshListener(
     css::uno::Reference< css::util::XRefreshListener > const & l)
 {
-    rBHelper.addListener(
-        cppu::UnoType< css::util::XRefreshListener >::get(), l);
+    std::unique_lock g(m_aMutex);
+    maRefreshListeners.addInterface(g, l);
 }
 
 void Service::removeRefreshListener(
     css::uno::Reference< css::util::XRefreshListener > const & l)
 {
-    rBHelper.removeListener(
-        cppu::UnoType< css::util::XRefreshListener >::get(), l);
+    std::unique_lock g(m_aMutex);
+    maRefreshListeners.removeInterface(g, l);
 }
 
 void Service::flush() {
-    flushModifications();
-    cppu::OInterfaceContainerHelper * cont = rBHelper.getContainer(
-        cppu::UnoType< css::util::XFlushListener >::get());
-    if (cont != nullptr) {
+    std::unique_lock g(m_aMutex);
+    flushModifications(g);
+    if (maFlushListeners.getLength(g)) {
         css::lang::EventObject ev(static_cast< cppu::OWeakObject * >(this));
-        cont->notifyEach(&css::util::XFlushListener::flushed, ev);
+        maFlushListeners.notifyEach(g, &css::util::XFlushListener::flushed, 
ev);
     }
 }
 
 void Service::addFlushListener(
     css::uno::Reference< css::util::XFlushListener > const & l)
 {
-    rBHelper.addListener(cppu::UnoType< css::util::XFlushListener >::get(), l);
+    std::unique_lock g(m_aMutex);
+    maFlushListeners.addInterface(g, l);
 }
 
 void Service::removeFlushListener(
     css::uno::Reference< css::util::XFlushListener > const & l)
 {
-    rBHelper.removeListener(
-        cppu::UnoType< css::util::XFlushListener >::get(), l);
+    std::unique_lock g(m_aMutex);
+    maFlushListeners.removeInterface(g, l);
 }
 
 void Service::setLocale(css::lang::Locale const & eLocale)
@@ -331,13 +330,11 @@ css::lang::Locale Service::getLocale() {
     return loc;
 }
 
-void Service::flushModifications() const {
-    Components * components;
-    {
-        osl::MutexGuard guard(*lock_);
-        components = &Components::getSingleton(context_);
-    }
+void Service::flushModifications(std::unique_lock<std::mutex>& rGuard) const {
+    Components * components = &Components::getSingleton(context_);
+    rGuard.unlock();
     components->flushModifications();
+    rGuard.lock();
 }
 
 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*

Reply via email to