loplugin:inlinefields in utl::ReadWriteMutex
Change-Id: Ibd31d1c0ec154be886f9fd4d2e7a439b2d7f5f4a
Reviewed-on: https://gerrit.libreoffice.org/36267
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/unotools/readwritemutexguard.hxx b/include/unotools/readwritemutexguard.hxx
index 01a022c..9476702 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 904dba3..2932212 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 );
}
}