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

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Fri Apr 26 11:20:32 UTC 2019


 comphelper/source/misc/solarmutex.cxx |    4 ++--
 include/comphelper/solarmutex.hxx     |    5 ++++-
 2 files changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 9b3eeff056793d38c7933a676cc471c4724b126f
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Wed Apr 24 22:40:08 2019 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Fri Apr 26 13:19:26 2019 +0200

    SolarMutex::m_nThreadId is read without SolarMutex::m_aMutex locked
    
    ...so better make it std::atomic<> (and it also can be private).  And in
    SolarMutex::doRelease, make sure that m_nCount is only read with m_aMutex
    locked.
    
    Change-Id: Iee0c1465e60e07ccd8955010a3dbc15a99dbe807
    Reviewed-on: https://gerrit.libreoffice.org/71260
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/comphelper/source/misc/solarmutex.cxx b/comphelper/source/misc/solarmutex.cxx
index 3a6b34af1947..b9747dbac1b3 100644
--- a/comphelper/source/misc/solarmutex.cxx
+++ b/comphelper/source/misc/solarmutex.cxx
@@ -60,9 +60,9 @@ void SolarMutex::doAcquire( const sal_uInt32 nLockCount )
 
 sal_uInt32 SolarMutex::doRelease( bool bUnlockAll )
 {
-    if ( m_nCount == 0 )
+    if ( !IsCurrentThread() )
         std::abort();
-    if ( m_nThreadId != osl::Thread::getCurrentIdentifier() )
+    if ( m_nCount == 0 )
         std::abort();
 
     const sal_uInt32 nCount = bUnlockAll ? m_nCount : 1;
diff --git a/include/comphelper/solarmutex.hxx b/include/comphelper/solarmutex.hxx
index 0c147f405560..4094e08ee1f7 100644
--- a/include/comphelper/solarmutex.hxx
+++ b/include/comphelper/solarmutex.hxx
@@ -23,6 +23,8 @@
 #include <sal/config.h>
 
 #include <assert.h>
+#include <atomic>
+
 #include <osl/thread.h>
 #include <osl/mutex.hxx>
 #include <comphelper/comphelperdllapi.h>
@@ -68,9 +70,10 @@ protected:
 
     osl::Mutex            m_aMutex;
     sal_uInt32            m_nCount;
-    oslThreadIdentifier   m_nThreadId;
 
 private:
+    std::atomic<oslThreadIdentifier> m_nThreadId;
+
     SolarMutex(const SolarMutex&) = delete;
     SolarMutex& operator=(const SolarMutex&) = delete;
 


More information about the Libreoffice-commits mailing list