diff options
-rw-r--r-- | include/unotools/readwritemutexguard.hxx | 11 | ||||
-rw-r--r-- | unotools/source/i18n/readwritemutexguard.cxx | 36 |
2 files changed, 20 insertions, 27 deletions
diff --git a/include/unotools/readwritemutexguard.hxx b/include/unotools/readwritemutexguard.hxx index 01a022c26217..94767024a911 100644 --- a/include/unotools/readwritemutexguard.hxx +++ b/include/unotools/readwritemutexguard.hxx @@ -31,21 +31,14 @@ class ReadWriteMutex sal_uInt32 nReadCount; sal_uInt32 nBlockCriticalCount; - ::osl::Mutex* pMutex; - ::osl::Mutex* pWriteMutex; + ::osl::Mutex maMutex; + ::osl::Mutex maWriteMutex; public: ReadWriteMutex() : nReadCount(0) , nBlockCriticalCount(0) - , pMutex( new ::osl::Mutex ) - , pWriteMutex( new ::osl::Mutex ) {} - ~ReadWriteMutex() - { - delete pMutex; - delete pWriteMutex; - } }; namespace ReadWriteGuardMode { diff --git a/unotools/source/i18n/readwritemutexguard.cxx b/unotools/source/i18n/readwritemutexguard.cxx index 904dba39c0c7..2932212d3c12 100644 --- a/unotools/source/i18n/readwritemutexguard.cxx +++ b/unotools/source/i18n/readwritemutexguard.cxx @@ -28,52 +28,52 @@ ReadWriteGuard::ReadWriteGuard( ReadWriteMutex& rMutexP, { // don't do anything until a pending write completed (or another // ReadWriteGuard leaves the ctor phase) - ::osl::MutexGuard aGuard( rMutex.pWriteMutex ); + ::osl::MutexGuard aGuard( rMutex.maWriteMutex ); nMode = nRequestMode; if ( nMode & ReadWriteGuardMode::nWrite ) { - rMutex.pWriteMutex->acquire(); + rMutex.maWriteMutex.acquire(); // wait for any read to complete // TODO: set up a waiting thread instead of a loop bool bWait = true; do { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); bWait = (rMutex.nReadCount != 0); if ( nMode & ReadWriteGuardMode::nCriticalChange ) bWait |= (rMutex.nBlockCriticalCount != 0); - rMutex.pMutex->release(); + rMutex.maMutex.release(); } while ( bWait ); } else if ( nMode & ReadWriteGuardMode::nBlockCritical ) { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); ++rMutex.nBlockCriticalCount; - rMutex.pMutex->release(); + rMutex.maMutex.release(); } else { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); ++rMutex.nReadCount; - rMutex.pMutex->release(); + rMutex.maMutex.release(); } } ReadWriteGuard::~ReadWriteGuard() { if ( nMode & ReadWriteGuardMode::nWrite ) - rMutex.pWriteMutex->release(); + rMutex.maWriteMutex.release(); else if ( nMode & ReadWriteGuardMode::nBlockCritical ) { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); --rMutex.nBlockCriticalCount; - rMutex.pMutex->release(); + rMutex.maMutex.release(); } else { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); --rMutex.nReadCount; - rMutex.pMutex->release(); + rMutex.maMutex.release(); } } @@ -86,20 +86,20 @@ void ReadWriteGuard::changeReadToWrite() // MUST release read before acquiring write mutex or dead lock would // occur if there was a write in another thread waiting for this read // to complete. - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); --rMutex.nReadCount; - rMutex.pMutex->release(); + rMutex.maMutex.release(); - rMutex.pWriteMutex->acquire(); + rMutex.maWriteMutex.acquire(); nMode |= ReadWriteGuardMode::nWrite; // wait for any other read to complete // TODO: set up a waiting thread instead of a loop bool bWait = true; do { - rMutex.pMutex->acquire(); + rMutex.maMutex.acquire(); bWait = (rMutex.nReadCount != 0); - rMutex.pMutex->release(); + rMutex.maMutex.release(); } while ( bWait ); } } |