summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorArnaud VERSINI <arnaud.versini@libreoffice.org>2022-11-20 17:46:10 +0100
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-11-21 09:15:59 +0100
commitd5f29872f5a149fc7905cdf340215c07af0d4da8 (patch)
tree6cf8bb74cfdaf6e7021ffb43f7a50cf42f1bd259 /sal
parent3dc7aa719006aaf62be93ae92311c1859c2c7e19 (diff)
sal/osl win32 : use non recursive mutexes in file and thread
Change-Id: I7e0e7f7a8bdc3fa92beca10935bb3c62d57f92fd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143002 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sal')
-rw-r--r--sal/osl/w32/file.cxx73
-rw-r--r--sal/osl/w32/thread.cxx11
2 files changed, 32 insertions, 52 deletions
diff --git a/sal/osl/w32/file.cxx b/sal/osl/w32/file.cxx
index be921aede733..4c4c06f462fa 100644
--- a/sal/osl/w32/file.cxx
+++ b/sal/osl/w32/file.cxx
@@ -34,6 +34,7 @@
#include <cassert>
#include <algorithm>
#include <limits>
+#include <mutex>
#ifdef max /* conflict w/ std::numeric_limits<T>::max() */
#undef max
@@ -64,7 +65,7 @@ namespace {
*/
struct FileHandle_Impl
{
- CRITICAL_SECTION m_mutex;
+ std::mutex m_mutex;
HANDLE m_hFile;
StateBits m_state;
@@ -127,32 +128,10 @@ struct FileHandle_Impl
SIZE_T nBytes);
oslFileError syncFile();
-
- /** Guard.
- */
- class Guard
- {
- LPCRITICAL_SECTION m_mutex;
-
- public:
- explicit Guard(LPCRITICAL_SECTION pMutex);
- ~Guard();
- };
};
}
-FileHandle_Impl::Guard::Guard(LPCRITICAL_SECTION pMutex)
- : m_mutex (pMutex)
-{
- assert(pMutex);
- ::EnterCriticalSection (m_mutex);
-}
-
-FileHandle_Impl::Guard::~Guard()
-{
- ::LeaveCriticalSection (m_mutex);
-}
FileHandle_Impl::FileHandle_Impl(HANDLE hFile)
: m_hFile (hFile),
@@ -165,7 +144,6 @@ FileHandle_Impl::FileHandle_Impl(HANDLE hFile)
m_bufsiz (getpagesize()),
m_buffer (nullptr)
{
- ::InitializeCriticalSection (&m_mutex);
m_buffer = static_cast<sal_uInt8 *>(calloc(m_bufsiz, 1));
}
@@ -173,7 +151,6 @@ FileHandle_Impl::~FileHandle_Impl()
{
free(m_buffer);
m_buffer = nullptr;
- ::DeleteCriticalSection (&m_mutex);
}
SIZE_T FileHandle_Impl::getpagesize()
@@ -679,7 +656,7 @@ oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle)
if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
return osl_File_E_INVAL;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
oslFileError result = pImpl->syncFile();
if (result != osl_File_E_None)
@@ -697,21 +674,23 @@ oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle)
if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
return osl_File_E_INVAL;
- ::EnterCriticalSection(&(pImpl->m_mutex));
-
- oslFileError result = pImpl->syncFile();
- if (result != osl_File_E_None)
- {
- /* ignore double failure */
- (void)::CloseHandle(pImpl->m_hFile);
- }
- else if (!::CloseHandle(pImpl->m_hFile))
+ oslFileError result;
{
- /* translate error code */
- result = oslTranslateFileError(GetLastError());
+ std::lock_guard lock(pImpl->m_mutex);
+
+ result = pImpl->syncFile();
+ if (result != osl_File_E_None)
+ {
+ /* ignore double failure */
+ (void)::CloseHandle(pImpl->m_hFile);
+ }
+ else if (!::CloseHandle(pImpl->m_hFile))
+ {
+ /* translate error code */
+ result = oslTranslateFileError(GetLastError());
+ }
}
- ::LeaveCriticalSection(&(pImpl->m_mutex));
delete pImpl;
return result;
}
@@ -820,7 +799,7 @@ SAL_CALL osl_readLine(
sal_uInt64 uBytesRead = 0;
// read at current filepos; filepos += uBytesRead;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
oslFileError result = pImpl->readLineAt(
pImpl->m_filepos, ppSequence, &uBytesRead);
if (result == osl_File_E_None)
@@ -839,7 +818,7 @@ oslFileError SAL_CALL osl_readFile(
return osl_File_E_INVAL;
// read at current filepos; filepos += *pBytesRead;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
oslFileError result = pImpl->readFileAt(
pImpl->m_filepos, pBuffer, uBytesRequested, pBytesRead);
if (result == osl_File_E_None)
@@ -859,7 +838,7 @@ oslFileError SAL_CALL osl_writeFile(
return osl_File_E_INVAL;
// write at current filepos; filepos += *pBytesWritten;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
oslFileError result = pImpl->writeFileAt(
pImpl->m_filepos, pBuffer, uBytesToWrite, pBytesWritten);
if (result == osl_File_E_None)
@@ -899,7 +878,7 @@ oslFileError SAL_CALL osl_readFileAt(
LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
// read at specified fileptr
- FileHandle_Impl::Guard lock (&(pImpl->m_mutex));
+ std::lock_guard lock (pImpl->m_mutex);
return pImpl->readFileAt(nOffset, pBuffer, uBytesRequested, pBytesRead);
}
@@ -922,7 +901,7 @@ oslFileError SAL_CALL osl_writeFileAt(
LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
// write at specified fileptr
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
return pImpl->writeFileAt(nOffset, pBuffer, uBytesToWrite, pBytesWritten);
}
@@ -933,7 +912,7 @@ oslFileError SAL_CALL osl_isEndOfFile(oslFileHandle Handle, sal_Bool *pIsEOF)
if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pIsEOF))
return osl_File_E_INVAL;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
*pIsEOF = (pImpl->getPos() == pImpl->getSize());
return osl_File_E_None;
}
@@ -960,7 +939,7 @@ oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_
return osl_File_E_OVERFLOW;
LONGLONG nPos = 0, nOffset = sal::static_int_cast< LONGLONG >(uOffset);
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
switch (uHow)
{
case osl_Pos_Absolut:
@@ -1000,7 +979,7 @@ oslFileError SAL_CALL osl_getFileSize(oslFileHandle Handle, sal_uInt64 *pSize)
if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pSize))
return osl_File_E_INVAL;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
*pSize = pImpl->getSize();
return osl_File_E_None;
}
@@ -1017,7 +996,7 @@ oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize)
if (exceedsMaxLONGLONG(uSize))
return osl_File_E_OVERFLOW;
- FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
+ std::lock_guard lock(pImpl->m_mutex);
oslFileError result = pImpl->syncFile();
if (result != osl_File_E_None)
return result;
diff --git a/sal/osl/w32/thread.cxx b/sal/osl/w32/thread.cxx
index fe5ac30b01df..194c4c6e5930 100644
--- a/sal/osl/w32/thread.cxx
+++ b/sal/osl/w32/thread.cxx
@@ -32,6 +32,7 @@
#include <systools/win32/comtools.hxx>
#include <errno.h>
+#include <mutex>
namespace {
@@ -392,9 +393,9 @@ typedef struct TLS_
} TLS, *PTLS;
PTLS g_pThreadKeyList = nullptr;
-osl::Mutex& getThreadKeyListMutex()
+std::mutex& getThreadKeyListMutex()
{
- static osl::Mutex g_ThreadKeyListMutex;
+ static std::mutex g_ThreadKeyListMutex;
return g_ThreadKeyListMutex;
}
@@ -404,7 +405,7 @@ static void AddKeyToList( PTLS pTls )
{
if ( pTls )
{
- osl::MutexGuard aGuard(getThreadKeyListMutex());
+ std::lock_guard aGuard(getThreadKeyListMutex());
pTls->pNext = g_pThreadKeyList;
pTls->pPrev = nullptr;
@@ -420,7 +421,7 @@ static void RemoveKeyFromList( PTLS pTls )
{
if ( pTls )
{
- osl::MutexGuard aGuard(getThreadKeyListMutex());
+ std::lock_guard aGuard(getThreadKeyListMutex());
if ( pTls->pPrev )
pTls->pPrev->pNext = pTls->pNext;
else
@@ -438,7 +439,7 @@ void osl_callThreadKeyCallbackOnThreadDetach(void)
{
PTLS pTls;
- osl::MutexGuard aGuard(getThreadKeyListMutex());
+ std::lock_guard aGuard(getThreadKeyListMutex());
pTls = g_pThreadKeyList;
while ( pTls )
{