summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/unotools/readwritemutexguard.hxx11
-rw-r--r--unotools/source/i18n/readwritemutexguard.cxx36
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 );
}
}