[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