ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx | 38 +++++++++++++-------- ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx | 10 +++-- 2 files changed, 32 insertions(+), 16 deletions(-)
New commits: commit ef3c759357cb3dbe4fee46afd24105a1c2e24126 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sun May 8 21:39:01 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue May 17 13:22:40 2022 +0200 osl::Mutex->std::mutex in HierarchyResultSetDataSupplier Change-Id: I61bcbc85fbbae469c5463a69dc835b7d1ac0575c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134086 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx b/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx index 77747883bcbb..1a2f29f6b30c 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasupplier.cxx @@ -60,8 +60,14 @@ HierarchyResultSetDataSupplier::~HierarchyResultSetDataSupplier() OUString HierarchyResultSetDataSupplier::queryContentIdentifierString( sal_uInt32 nIndex ) { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); + return queryContentIdentifierStringImpl(aGuard, nIndex); +} +OUString HierarchyResultSetDataSupplier::queryContentIdentifierStringImpl( + std::unique_lock<std::mutex>& rGuard, + sal_uInt32 nIndex ) +{ if ( nIndex < m_aResults.size() ) { OUString aId = m_aResults[ nIndex ]->aId; @@ -72,7 +78,7 @@ OUString HierarchyResultSetDataSupplier::queryContentIdentifierString( } } - if ( getResult( nIndex ) ) + if ( getResultImpl( rGuard, nIndex ) ) { OUString aId = m_xContent->getIdentifier()->getContentIdentifier(); @@ -93,7 +99,7 @@ OUString HierarchyResultSetDataSupplier::queryContentIdentifierString( uno::Reference< ucb::XContentIdentifier > HierarchyResultSetDataSupplier::queryContentIdentifier( sal_uInt32 nIndex ) { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); if ( nIndex < m_aResults.size() ) { @@ -106,7 +112,7 @@ HierarchyResultSetDataSupplier::queryContentIdentifier( sal_uInt32 nIndex ) } } - OUString aId = queryContentIdentifierString( nIndex ); + OUString aId = queryContentIdentifierStringImpl( aGuard, nIndex ); if ( !aId.isEmpty() ) { uno::Reference< ucb::XContentIdentifier > xId @@ -122,7 +128,7 @@ HierarchyResultSetDataSupplier::queryContentIdentifier( sal_uInt32 nIndex ) uno::Reference< ucb::XContent > HierarchyResultSetDataSupplier::queryContent( sal_uInt32 nIndex ) { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); if ( nIndex < m_aResults.size() ) { @@ -158,8 +164,12 @@ HierarchyResultSetDataSupplier::queryContent( sal_uInt32 nIndex ) // virtual bool HierarchyResultSetDataSupplier::getResult( sal_uInt32 nIndex ) { - osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); + return getResultImpl(aGuard, nIndex); +} +bool HierarchyResultSetDataSupplier::getResultImpl( std::unique_lock<std::mutex>& rGuard, sal_uInt32 nIndex ) +{ if ( m_aResults.size() > nIndex ) { // Result already present. @@ -201,7 +211,7 @@ bool HierarchyResultSetDataSupplier::getResult( sal_uInt32 nIndex ) if ( xResultSet.is() ) { // Callbacks follow! - aGuard.clear(); + rGuard.unlock(); if ( nOldCount < m_aResults.size() ) xResultSet->rowCountChanged( @@ -209,6 +219,8 @@ bool HierarchyResultSetDataSupplier::getResult( sal_uInt32 nIndex ) if ( m_bCountFinal ) xResultSet->rowCountFinal(); + + rGuard.lock(); } return bFound; @@ -218,7 +230,7 @@ bool HierarchyResultSetDataSupplier::getResult( sal_uInt32 nIndex ) // virtual sal_uInt32 HierarchyResultSetDataSupplier::totalCount() { - osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); if ( m_bCountFinal ) return m_aResults.size(); @@ -238,7 +250,7 @@ sal_uInt32 HierarchyResultSetDataSupplier::totalCount() if ( xResultSet.is() ) { // Callbacks follow! - aGuard.clear(); + aGuard.unlock(); if ( nOldCount < m_aResults.size() ) xResultSet->rowCountChanged( @@ -269,7 +281,7 @@ bool HierarchyResultSetDataSupplier::isCountFinal() uno::Reference< sdbc::XRow > HierarchyResultSetDataSupplier::queryPropertyValues( sal_uInt32 nIndex ) { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); if ( nIndex < m_aResults.size() ) { @@ -282,7 +294,7 @@ HierarchyResultSetDataSupplier::queryPropertyValues( sal_uInt32 nIndex ) } } - if ( getResult( nIndex ) ) + if ( getResultImpl( aGuard, nIndex ) ) { HierarchyContentProperties aData( m_aResults[ nIndex ]->aData ); @@ -294,7 +306,7 @@ HierarchyResultSetDataSupplier::queryPropertyValues( sal_uInt32 nIndex ) aData, static_cast< HierarchyContentProvider * >( m_xContent->getProvider().get() ), - queryContentIdentifierString( nIndex ) ); + queryContentIdentifierStringImpl( aGuard, nIndex ) ); m_aResults[ nIndex ]->xRow = xRow; return xRow; } @@ -306,7 +318,7 @@ HierarchyResultSetDataSupplier::queryPropertyValues( sal_uInt32 nIndex ) // virtual void HierarchyResultSetDataSupplier::releasePropertyValues( sal_uInt32 nIndex ) { - osl::Guard< osl::Mutex > aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); if ( nIndex < m_aResults.size() ) m_aResults[ nIndex ]->xRow.clear(); diff --git a/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx b/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx index d1cfdb1446c0..8bad51dc0d5a 100644 --- a/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx +++ b/ucb/source/ucp/hierarchy/hierarchydatasupplier.hxx @@ -21,6 +21,7 @@ #include <rtl/ref.hxx> #include <ucbhelper/resultset.hxx> +#include <mutex> #include <vector> #include "hierarchydata.hxx" @@ -42,13 +43,13 @@ public: sal_Int32 nOpenMode ); virtual ~HierarchyResultSetDataSupplier() override; - virtual OUString queryContentIdentifierString( sal_uInt32 nIndex ) override; + virtual OUString queryContentIdentifierString( sal_uInt32 nIndex ) final override; virtual css::uno::Reference< css::ucb::XContentIdentifier > queryContentIdentifier( sal_uInt32 nIndex ) override; virtual css::uno::Reference< css::ucb::XContent > queryContent( sal_uInt32 nIndex ) override; - virtual bool getResult( sal_uInt32 nIndex ) override; + virtual bool getResult( sal_uInt32 nIndex ) final override; virtual sal_uInt32 totalCount() override; virtual sal_uInt32 currentCount() override; @@ -62,6 +63,9 @@ public: virtual void validate() override; private: + OUString queryContentIdentifierStringImpl( std::unique_lock<std::mutex>&, sal_uInt32 nIndex ); + bool getResultImpl( std::unique_lock<std::mutex>&, sal_uInt32 nIndex ); + struct ResultListEntry { OUString aId; @@ -73,7 +77,7 @@ private: explicit ResultListEntry( const HierarchyEntryData& rEntry ) : aData( rEntry ) {} }; typedef std::vector< std::unique_ptr<ResultListEntry> > ResultList; - osl::Mutex m_aMutex; + std::mutex m_aMutex; ResultList m_aResults; rtl::Reference< HierarchyContent > m_xContent; css::uno::Reference< css::uno::XComponentContext > m_xContext;