basic/source/inc/namecont.hxx |   11 +++++------
 basic/source/uno/namecont.cxx |   42 ++++++++++++++++++++++++++----------------
 vcl/source/app/session.cxx    |   34 ++++++++++++++++------------------
 3 files changed, 47 insertions(+), 40 deletions(-)

New commits:
commit 97c791d42f049763b0d3b01b4d2dc75cede9e858
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Mar 27 15:03:03 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Mar 29 07:42:07 2024 +0100

    convert VCLSession to comphelper::WeakComponentImplHelper
    
    Change-Id: I74bc44f84dd6dccde602c31a0f87a1780e3e7231
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165495
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx
index d61902fcf647..3f1ff9cb2f9b 100644
--- a/vcl/source/app/session.cxx
+++ b/vcl/source/app/session.cxx
@@ -21,8 +21,7 @@
 #include <sal/config.h>
 #include <sal/log.hxx>
 
-#include <cppuhelper/basemutex.hxx>
-#include <cppuhelper/compbase.hxx>
+#include <comphelper/compbase.hxx>
 #include <cppuhelper/supportsservice.hxx>
 
 #include <comphelper/diagnose_ex.hxx>
@@ -52,8 +51,7 @@ SalSession::~SalSession()
 namespace {
 
 class VCLSession:
-    private cppu::BaseMutex,
-    public cppu::WeakComponentImplHelper < XSessionManagerClient, 
css::lang::XServiceInfo >
+    public comphelper::WeakComponentImplHelper < XSessionManagerClient, 
css::lang::XServiceInfo >
 {
     struct Listener
     {
@@ -100,7 +98,7 @@ class VCLSession:
         return {"com.sun.star.frame.SessionManagerClient"};
     }
 
-    void SAL_CALL disposing() override;
+    void disposing(std::unique_lock<std::mutex>& rGuard) override;
 
     void callSaveRequested( bool bShutdown );
     void callShutdownCancelled();
@@ -114,8 +112,7 @@ public:
 }
 
 VCLSession::VCLSession()
-        : WeakComponentImplHelper( m_aMutex ),
-          m_xSession( ImplGetSVData()->mpDefInst->CreateSalSession() ),
+        : m_xSession( ImplGetSVData()->mpDefInst->CreateSalSession() ),
           m_bInteractionRequested( false ),
           m_bInteractionGranted( false ),
           m_bInteractionDone( false ),
@@ -133,7 +130,7 @@ void VCLSession::callSaveRequested( bool bShutdown )
 
     std::vector< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        std::unique_lock aGuard( m_aMutex );
         // reset listener states
         for (auto & listener : m_aListeners) {
             listener.m_bSaveDone = listener.m_bInteractionRequested = 
listener.m_bInteractionDone = false;
@@ -172,7 +169,7 @@ void VCLSession::callInteractionGranted( bool 
bInteractionGranted )
 
     std::vector< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        std::unique_lock aGuard( m_aMutex );
         // copy listener vector since calling a listener may remove it.
         for (auto const & listener: m_aListeners)
             if( listener.m_bInteractionRequested )
@@ -204,7 +201,7 @@ void VCLSession::callShutdownCancelled()
 
     std::vector< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        std::unique_lock aGuard( m_aMutex );
         // copy listener vector since calling a listener may remove it.
         aListeners = m_aListeners;
         // set back interaction state
@@ -222,7 +219,7 @@ void VCLSession::callQuit()
 
     std::vector< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        std::unique_lock aGuard( m_aMutex );
         // copy listener vector since calling a listener may remove it.
         aListeners = m_aListeners;
         // set back interaction state
@@ -274,7 +271,7 @@ void SAL_CALL VCLSession::addSessionManagerListener( const 
css::uno::Reference<X
 {
     SAL_INFO("vcl.se", "VCLSession::addSessionManagerListener" );
 
-    osl::MutexGuard aGuard( m_aMutex );
+    std::unique_lock aGuard( m_aMutex );
 
     SAL_INFO("vcl.se.debug", "  m_aListeners.size() = " << m_aListeners.size() 
);
     m_aListeners.emplace_back( xListener );
@@ -284,7 +281,7 @@ void SAL_CALL VCLSession::removeSessionManagerListener( 
const css::uno::Referenc
 {
     SAL_INFO("vcl.se", "VCLSession::removeSessionManagerListener" );
 
-    osl::MutexGuard aGuard( m_aMutex );
+    std::unique_lock aGuard( m_aMutex );
 
     SAL_INFO("vcl.se.debug", "  m_aListeners.size() = " << m_aListeners.size() 
);
 
@@ -306,7 +303,7 @@ void SAL_CALL VCLSession::queryInteraction( const 
css::uno::Reference<XSessionMa
         return;
     }
 
-    osl::MutexGuard aGuard( m_aMutex );
+    std::unique_lock aGuard( m_aMutex );
     if( ! m_bInteractionRequested )
     {
         if (m_xSession)
@@ -329,7 +326,7 @@ void SAL_CALL VCLSession::interactionDone( const 
css::uno::Reference< XSessionMa
 {
     SAL_INFO("vcl.se", "VCLSession::interactionDone");
 
-    osl::MutexGuard aGuard( m_aMutex );
+    std::unique_lock aGuard( m_aMutex );
     int nRequested = 0, nDone = 0;
     for (auto & listener: m_aListeners)
     {
@@ -357,7 +354,7 @@ void SAL_CALL VCLSession::saveDone( const 
css::uno::Reference< XSessionManagerLi
 {
     SAL_INFO("vcl.se", "VCLSession::saveDone");
 
-    osl::MutexGuard aGuard( m_aMutex );
+    std::unique_lock aGuard( m_aMutex );
 
     bool bSaveDone = true;
     for (auto & listener: m_aListeners)
@@ -385,22 +382,23 @@ sal_Bool SAL_CALL VCLSession::cancelShutdown()
     return m_xSession && m_xSession->cancelShutdown();
 }
 
-void VCLSession::disposing() {
+void VCLSession::disposing(std::unique_lock<std::mutex>& rGuard) {
     SAL_INFO("vcl.se", "VCLSession::disposing");
 
     std::vector<Listener> vector;
     {
-        osl::MutexGuard g(m_aMutex);
         vector.swap(m_aListeners);
     }
     css::lang::EventObject src(getXWeak());
     for (auto const & listener: vector) {
+        rGuard.unlock();
         try {
             listener.m_xListener->disposing(src);
             SAL_INFO("vcl.se.debug", "  call Listener disposing");
         } catch (css::uno::RuntimeException &) {
             TOOLS_WARN_EXCEPTION("vcl.se", "ignoring");
         }
+        rGuard.lock();
     }
 }
 
commit d547ad77555fc0dce5ecf3c55b44f5ce7eade7cd
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Mar 27 14:35:55 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Mar 29 07:41:58 2024 +0100

    convert NameContainer to comphelper::WeakImplHelper
    
    Change-Id: If89ee5bf200affc04704b7f075f25cbf599c1e62
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165494
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/basic/source/inc/namecont.hxx b/basic/source/inc/namecont.hxx
index 9973ab94e815..4db38ac881a4 100644
--- a/basic/source/inc/namecont.hxx
+++ b/basic/source/inc/namecont.hxx
@@ -51,19 +51,20 @@
 #include <cppuhelper/basemutex.hxx>
 #include <rtl/ref.hxx>
 #include <comphelper/interfacecontainer3.hxx>
+#include <comphelper/interfacecontainer4.hxx>
 #include <xmlscript/xmllib_imexp.hxx>
 
 class BasicManager;
 
 namespace basic
 {
-typedef ::cppu::WeakImplHelper<
+typedef ::comphelper::WeakImplHelper<
     css::container::XNameContainer,
     css::container::XContainer,
     css::util::XChangesNotifier > NameContainer_BASE;
 
 
-class NameContainer final : public ::cppu::BaseMutex, public NameContainer_BASE
+class NameContainer final : public NameContainer_BASE
 {
     typedef std::unordered_map < OUString, sal_Int32 > NameContainerNameMap;
 
@@ -75,16 +76,14 @@ class NameContainer final : public ::cppu::BaseMutex, 
public NameContainer_BASE
     css::uno::Type mType;
     css::uno::XInterface* mpxEventSource;
 
-    
::comphelper::OInterfaceContainerHelper3<css::container::XContainerListener> 
maContainerListeners;
-    ::comphelper::OInterfaceContainerHelper3<css::util::XChangesListener> 
maChangesListeners;
+    
::comphelper::OInterfaceContainerHelper4<css::container::XContainerListener> 
maContainerListeners;
+    ::comphelper::OInterfaceContainerHelper4<css::util::XChangesListener> 
maChangesListeners;
 
 public:
     NameContainer( const css::uno::Type& rType )
         : mnElementCount( 0 )
         , mType( rType )
         , mpxEventSource( nullptr )
-        , maContainerListeners( m_aMutex )
-        , maChangesListeners( m_aMutex )
     {}
 
     void setEventSource( css::uno::XInterface* pxEventSource )
diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
index 430cab8b3264..2d1dea85fc67 100644
--- a/basic/source/uno/namecont.cxx
+++ b/basic/source/uno/namecont.cxx
@@ -156,27 +156,29 @@ void NameContainer::replaceByName( const OUString& aName, 
const Any& aElement )
     mValues[ iHashResult ] = aElement;
 
 
+    std::unique_lock aGuard(m_aMutex);
+
     // Fire event
-    if( maContainerListeners.getLength() > 0 )
+    if( maContainerListeners.getLength(aGuard) > 0 )
     {
         ContainerEvent aEvent;
         aEvent.Source = mpxEventSource;
         aEvent.Accessor <<= aName;
         aEvent.Element = aElement;
         aEvent.ReplacedElement = aOldElement;
-        maContainerListeners.notifyEach( &XContainerListener::elementReplaced, 
aEvent );
+        maContainerListeners.notifyEach( aGuard, 
&XContainerListener::elementReplaced, aEvent );
     }
 
     /*  After the container event has been fired (one listener will update the
         core Basic manager), fire change event. Listeners can rely on that the
         Basic source code of the core Basic manager is up-to-date. */
-    if( maChangesListeners.getLength() > 0 )
+    if( maChangesListeners.getLength(aGuard) > 0 )
     {
         ChangesEvent aEvent;
         aEvent.Source = mpxEventSource;
         aEvent.Base <<= aEvent.Source;
         aEvent.Changes = { { Any(aName), aElement, aOldElement } };
-        maChangesListeners.notifyEach( &XChangesListener::changesOccurred, 
aEvent );
+        maChangesListeners.notifyEach( aGuard, 
&XChangesListener::changesOccurred, aEvent );
     }
 }
 
@@ -205,26 +207,28 @@ void NameContainer::insertNoCheck(const OUString& aName, 
const Any& aElement)
     mHashMap[ aName ] = nCount;
     mnElementCount++;
 
+    std::unique_lock aGuard(m_aMutex);
+
     // Fire event
-    if( maContainerListeners.getLength() > 0 )
+    if( maContainerListeners.getLength(aGuard) > 0 )
     {
         ContainerEvent aEvent;
         aEvent.Source = mpxEventSource;
         aEvent.Accessor <<= aName;
         aEvent.Element = aElement;
-        maContainerListeners.notifyEach( &XContainerListener::elementInserted, 
aEvent );
+        maContainerListeners.notifyEach( aGuard, 
&XContainerListener::elementInserted, aEvent );
     }
 
     /*  After the container event has been fired (one listener will update the
         core Basic manager), fire change event. Listeners can rely on that the
         Basic source code of the core Basic manager is up-to-date. */
-    if( maChangesListeners.getLength() > 0 )
+    if( maChangesListeners.getLength(aGuard) > 0 )
     {
         ChangesEvent aEvent;
         aEvent.Source = mpxEventSource;
         aEvent.Base <<= aEvent.Source;
         aEvent.Changes = { { Any(aName), aElement, {} } };
-        maChangesListeners.notifyEach( &XChangesListener::changesOccurred, 
aEvent );
+        maChangesListeners.notifyEach( aGuard, 
&XChangesListener::changesOccurred, aEvent );
     }
 }
 
@@ -257,20 +261,22 @@ void NameContainer::removeByName( const OUString& aName )
     mValues.resize( iLast );
     mnElementCount--;
 
+    std::unique_lock aGuard(m_aMutex);
+
     // Fire event
-    if( maContainerListeners.getLength() > 0 )
+    if( maContainerListeners.getLength(aGuard) > 0 )
     {
         ContainerEvent aEvent;
         aEvent.Source = mpxEventSource;
         aEvent.Accessor <<= aName;
         aEvent.Element = aOldElement;
-        maContainerListeners.notifyEach( &XContainerListener::elementRemoved, 
aEvent );
+        maContainerListeners.notifyEach( aGuard, 
&XContainerListener::elementRemoved, aEvent );
     }
 
     /*  After the container event has been fired (one listener will update the
         core Basic manager), fire change event. Listeners can rely on that the
         Basic source code of the core Basic manager is up-to-date. */
-    if( maChangesListeners.getLength() > 0 )
+    if( maChangesListeners.getLength(aGuard) > 0 )
     {
         ChangesEvent aEvent;
         aEvent.Source = mpxEventSource;
@@ -278,7 +284,7 @@ void NameContainer::removeByName( const OUString& aName )
         aEvent.Changes = { { Any(aName),
                              {}, // Element remains empty (meaning "replaced 
with nothing")
                              aOldElement } };
-        maChangesListeners.notifyEach( &XChangesListener::changesOccurred, 
aEvent );
+        maChangesListeners.notifyEach( aGuard, 
&XChangesListener::changesOccurred, aEvent );
     }
 }
 
@@ -290,7 +296,8 @@ void SAL_CALL NameContainer::addContainerListener( const 
Reference< XContainerLi
     {
         throw RuntimeException("addContainerListener called with null 
xListener",getXWeak());
     }
-    maContainerListeners.addInterface( xListener );
+    std::unique_lock aGuard(m_aMutex);
+    maContainerListeners.addInterface( aGuard, xListener );
 }
 
 void SAL_CALL NameContainer::removeContainerListener( const Reference< 
XContainerListener >& xListener )
@@ -299,7 +306,8 @@ void SAL_CALL NameContainer::removeContainerListener( const 
Reference< XContaine
     {
         throw RuntimeException("removeContainerListener called with null 
xListener",getXWeak());
     }
-    maContainerListeners.removeInterface( xListener );
+    std::unique_lock aGuard(m_aMutex);
+    maContainerListeners.removeInterface( aGuard, xListener );
 }
 
 // Methods XChangesNotifier
@@ -309,7 +317,8 @@ void SAL_CALL NameContainer::addChangesListener( const 
Reference< XChangesListen
     {
         throw RuntimeException("addChangesListener called with null 
xListener",getXWeak());
     }
-    maChangesListeners.addInterface( xListener );
+    std::unique_lock aGuard(m_aMutex);
+    maChangesListeners.addInterface( aGuard, xListener );
 }
 
 void SAL_CALL NameContainer::removeChangesListener( const Reference< 
XChangesListener >& xListener )
@@ -318,7 +327,8 @@ void SAL_CALL NameContainer::removeChangesListener( const 
Reference< XChangesLis
     {
         throw RuntimeException("removeChangesListener called with null 
xListener",getXWeak());
     }
-    maChangesListeners.removeInterface( xListener );
+    std::unique_lock aGuard(m_aMutex);
+    maChangesListeners.removeInterface( aGuard, xListener );
 }
 
 

Reply via email to