summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2021-07-30 09:45:01 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-07-30 11:33:00 +0200
commit957a66e58444a2ac4bb77d978fd08e84fceffc38 (patch)
treea90e9a82cda5b786a7322c6bb4b37cea10819dec
parentf107e6893491bdf9e9bd1a8620218640ea76095a (diff)
osl::Mutex->std::mutex in SequenceInputStream
also (*) check params before taking mutex to minimise the time holding the mutex (*) some methods were missing a lock_guard Change-Id: Iac35328e67f81b38c896f7c1e2a3514b813656c1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119696 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--comphelper/source/streaming/seqstream.cxx23
-rw-r--r--include/comphelper/seqstream.hxx5
2 files changed, 17 insertions, 11 deletions
diff --git a/comphelper/source/streaming/seqstream.cxx b/comphelper/source/streaming/seqstream.cxx
index 7cffb774232f..b33c63f0931b 100644
--- a/comphelper/source/streaming/seqstream.cxx
+++ b/comphelper/source/streaming/seqstream.cxx
@@ -57,13 +57,13 @@ inline sal_Int32 SequenceInputStream::avail()
sal_Int32 SAL_CALL SequenceInputStream::readBytes( Sequence<sal_Int8>& aData, sal_Int32 nBytesToRead )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
- sal_Int32 nAvail = avail();
-
if (nBytesToRead < 0)
throw BufferSizeExceededException(OUString(),*this);
+ std::lock_guard aGuard( m_aMutex );
+
+ sal_Int32 nAvail = avail();
+
if (nAvail < nBytesToRead)
nBytesToRead = nAvail;
@@ -84,13 +84,13 @@ sal_Int32 SAL_CALL SequenceInputStream::readSomeBytes( Sequence<sal_Int8>& aData
void SAL_CALL SequenceInputStream::skipBytes( sal_Int32 nBytesToSkip )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
- sal_Int32 nAvail = avail();
-
if (nBytesToSkip < 0)
throw BufferSizeExceededException(OUString(),*this);
+ std::lock_guard aGuard( m_aMutex );
+
+ sal_Int32 nAvail = avail();
+
if (nAvail < nBytesToSkip)
nBytesToSkip = nAvail;
@@ -100,7 +100,7 @@ void SAL_CALL SequenceInputStream::skipBytes( sal_Int32 nBytesToSkip )
sal_Int32 SAL_CALL SequenceInputStream::available( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::lock_guard aGuard( m_aMutex );
return avail();
}
@@ -108,6 +108,8 @@ sal_Int32 SAL_CALL SequenceInputStream::available( )
void SAL_CALL SequenceInputStream::closeInput( )
{
+ std::lock_guard aGuard( m_aMutex );
+
if (m_nPos == -1)
throw NotConnectedException(OUString(), *this);
@@ -118,16 +120,19 @@ void SAL_CALL SequenceInputStream::seek( sal_Int64 location )
{
if ( location > m_aData.getLength() || location < 0 || location > SAL_MAX_INT32 )
throw IllegalArgumentException("bad location", static_cast<cppu::OWeakObject*>(this), 1);
+ std::lock_guard aGuard( m_aMutex );
m_nPos = static_cast<sal_Int32>(location);
}
sal_Int64 SAL_CALL SequenceInputStream::getPosition()
{
+ std::lock_guard aGuard( m_aMutex );
return m_nPos;
}
sal_Int64 SAL_CALL SequenceInputStream::getLength( )
{
+ std::lock_guard aGuard( m_aMutex );
return m_aData.getLength();
}
diff --git a/include/comphelper/seqstream.hxx b/include/comphelper/seqstream.hxx
index 6ea3ebc2c777..88db729832c5 100644
--- a/include/comphelper/seqstream.hxx
+++ b/include/comphelper/seqstream.hxx
@@ -27,6 +27,7 @@
#include <osl/mutex.hxx>
#include <cppuhelper/implbase.hxx>
#include <comphelper/comphelperdllapi.h>
+#include <mutex>
namespace comphelper
{
@@ -39,7 +40,7 @@ namespace comphelper
class COMPHELPER_DLLPUBLIC SequenceInputStream final
: public ::cppu::WeakImplHelper< css::io::XInputStream, css::io::XSeekable >
{
- ::osl::Mutex m_aMutex;
+ std::mutex m_aMutex;
css::uno::Sequence<sal_Int8> const m_aData;
sal_Int32 m_nPos;
@@ -62,7 +63,7 @@ public:
virtual sal_Int64 SAL_CALL getLength( ) override;
private:
- inline sal_Int32 avail();
+ sal_Int32 avail();
};
// don't export to avoid duplicate WeakImplHelper definitions with MSVC