[Libreoffice-commits] core.git: include/svtools sfx2/source svtools/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 23 09:34:11 UTC 2021


 include/svtools/asynclink.hxx        |    6 ++----
 sfx2/source/doc/docfile.cxx          |    1 -
 svtools/source/control/asynclink.cxx |   21 ++++++++-------------
 svtools/source/control/inettbc.cxx   |    2 --
 4 files changed, 10 insertions(+), 20 deletions(-)

New commits:
commit 0de7513cd73f1f35265e42f9a2b9befe81302c2c
Author:     Noel Grandin <noelgrandin at gmail.com>
AuthorDate: Thu Jul 22 22:18:01 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Jul 23 11:33:37 2021 +0200

    osl::Mutex->std::mutex in AsynchronLink
    
    and inline the mutex since the only two users of this class both
    want the mutex
    
    Change-Id: I7821d67ad77e08059ef2fe6ccc6cc06570e8070b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119393
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/svtools/asynclink.hxx b/include/svtools/asynclink.hxx
index 468f2a722548..bc0c742a4b4e 100644
--- a/include/svtools/asynclink.hxx
+++ b/include/svtools/asynclink.hxx
@@ -23,8 +23,7 @@
 #include <svtools/svtdllapi.h>
 #include <tools/link.hxx>
 #include <vcl/idle.hxx>
-#include <osl/mutex.hxx>
-#include <memory>
+#include <mutex>
 
 class Timer;
 struct ImplSVEvent;
@@ -38,7 +37,7 @@ class UNLESS_MERGELIBS(SVT_DLLPUBLIC) AsynchronLink
     bool             _bInCall;
     bool*            _pDeleted;
     void*            _pArg;
-    std::unique_ptr<::osl::Mutex> _pMutex;
+    std::mutex       _aMutex;
 
     DECL_DLLPRIVATE_LINK( HandleCall_Idle, Timer*, void );
     DECL_DLLPRIVATE_LINK( HandleCall_PostUserEvent, void*, void );
@@ -60,7 +59,6 @@ public:
     {}
     ~AsynchronLink();
 
-    void CreateMutex();
     void operator=( const Link<void*,void>& rLink ) { _aLink = rLink; }
     void Call( void* pObj, bool bAllowDoubles = false );
     void ClearPendingCall( );
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index c7655e2c5f62..b9e089eb8b82 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -462,7 +462,6 @@ SfxMedium_Impl::SfxMedium_Impl() :
     nLastStorageError( ERRCODE_NONE ),
     m_nSignatureState( SignatureState::NOSIGNATURES )
 {
-    aDoneLink.CreateMutex();
 }
 
 
diff --git a/svtools/source/control/asynclink.cxx b/svtools/source/control/asynclink.cxx
index 49ebadb062c1..d1a111744691 100644
--- a/svtools/source/control/asynclink.cxx
+++ b/svtools/source/control/asynclink.cxx
@@ -28,11 +28,6 @@
 
 namespace svtools {
 
-void AsynchronLink::CreateMutex()
-{
-    if( !_pMutex ) _pMutex.reset( new osl::Mutex );
-}
-
 void AsynchronLink::Call( void* pObj, bool bAllowDoubles )
 {
     SAL_INFO_IF( !_bInCall, "svtools", "Recursives Call. Eher ueber Timer. TLX Fragen" ); // Do NOT translate. This is a valuable historical artefact.
@@ -41,9 +36,8 @@ void AsynchronLink::Call( void* pObj, bool bAllowDoubles )
         _pArg = pObj;
         DBG_ASSERT( bAllowDoubles ||  !_nEventId, "Already made a call" );
         ClearPendingCall();
-        if( _pMutex ) _pMutex->acquire();
+        std::lock_guard aGuard(_aMutex);
         _nEventId = Application::PostUserEvent( LINK( this, AsynchronLink, HandleCall_PostUserEvent) );
-        if( _pMutex ) _pMutex->release();
     }
 }
 
@@ -54,14 +48,16 @@ AsynchronLink::~AsynchronLink()
         Application::RemoveUserEvent( _nEventId );
     }
     if( _pDeleted ) *_pDeleted = true;
-    _pMutex.reset();
 }
 
 IMPL_LINK_NOARG( AsynchronLink, HandleCall_Idle, Timer*, void )
 {
-    if( _pMutex ) _pMutex->acquire();
-    _nEventId = nullptr;
-    if( _pMutex ) _pMutex->release();
+    {
+        std::lock_guard aGuard(_aMutex);
+        _nEventId = nullptr;
+        // need to release the lock before calling the client since
+        // the client may call back into us
+    }
     Call_Impl( _pArg );
 }
 
@@ -72,13 +68,12 @@ IMPL_LINK_NOARG( AsynchronLink, HandleCall_PostUserEvent, void*, void )
 
 void AsynchronLink::ClearPendingCall()
 {
-    if( _pMutex ) _pMutex->acquire();
+    std::lock_guard aGuard(_aMutex);
     if( _nEventId )
     {
         Application::RemoveUserEvent( _nEventId );
         _nEventId = nullptr;
     }
-    if( _pMutex ) _pMutex->release();
 }
 
 void AsynchronLink::Call_Impl( void* pArg )
diff --git a/svtools/source/control/inettbc.cxx b/svtools/source/control/inettbc.cxx
index c027e45ea129..fe61e4c28e25 100644
--- a/svtools/source/control/inettbc.cxx
+++ b/svtools/source/control/inettbc.cxx
@@ -127,8 +127,6 @@ SvtMatchContext_Impl::SvtMatchContext_Impl(SvtURLBox* pBoxP, const OUString& rTe
     , stopped_(false)
     , commandId_(0)
 {
-    aLink.CreateMutex();
-
     FillPicklist( aPickList );
 }
 


More information about the Libreoffice-commits mailing list