framework/source/accelerators/storageholder.cxx | 36 ++++++++++---------- framework/source/inc/accelerators/storageholder.hxx | 3 + include/svx/xmleohlp.hxx | 4 +- svx/source/xml/xmleohlp.cxx | 14 +++---- 4 files changed, 29 insertions(+), 28 deletions(-)
New commits: commit 7fe0a4cddf23f0c15e95ff59e658ee3bbe11db51 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Dec 18 20:01:14 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Dec 20 08:33:50 2021 +0100 osl::Mutex->std::mutex in StorageHolder Change-Id: Ie0ababcea79b445ac73ffd4e69d260a7641af663 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127106 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/framework/source/accelerators/storageholder.cxx b/framework/source/accelerators/storageholder.cxx index a42e932ac259..e870ec0b71b8 100644 --- a/framework/source/accelerators/storageholder.cxx +++ b/framework/source/accelerators/storageholder.cxx @@ -47,7 +47,7 @@ StorageHolder::~StorageHolder() void StorageHolder::forgetCachedStorages() { - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); for (auto & lStorage : m_lStorages) { TStorageInfo& rInfo = lStorage.second; @@ -59,13 +59,13 @@ void StorageHolder::forgetCachedStorages() void StorageHolder::setRootStorage(const css::uno::Reference< css::embed::XStorage >& xRoot) { - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); m_xRoot = xRoot; } css::uno::Reference< css::embed::XStorage > StorageHolder::getRootStorage() const { - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); return m_xRoot; } @@ -76,9 +76,9 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openPath(const OUStri std::vector<OUString> lFolders = StorageHolder::impl_st_parsePath(sNormedPath); // SAFE -> ---------------------------------- - osl::ResettableMutexGuard aReadLock(m_mutex); + std::unique_lock aReadLock(m_mutex); css::uno::Reference< css::embed::XStorage > xParent = m_xRoot; - aReadLock.clear(); + aReadLock.unlock(); // <- SAFE ---------------------------------- css::uno::Reference< css::embed::XStorage > xChild; @@ -89,7 +89,7 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openPath(const OUStri OUString sCheckPath (sRelPath + lFolder + PATH_SEPARATOR); // SAFE -> ------------------------------ - aReadLock.reset(); + aReadLock.lock(); // If we found an already open storage ... we must increase // its use count. Otherwise it will may be closed too early :-) @@ -101,12 +101,12 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openPath(const OUStri ++(pInfo->UseCount); xChild = pInfo->Storage; - aReadLock.clear(); + aReadLock.unlock(); // <- SAFE ------------------------------ } else { - aReadLock.clear(); + aReadLock.unlock(); // <- SAFE ------------------------------ try @@ -130,7 +130,7 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openPath(const OUStri throw; } - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); pInfo = &(m_lStorages[sCheckPath]); pInfo->Storage = xChild; pInfo->UseCount = 1; @@ -154,7 +154,7 @@ StorageHolder::TStorageList StorageHolder::getAllPathStorages(const OUString& sP StorageHolder::TStorageList lStoragesOfPath; OUString sRelPath; - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); for (auto const& lFolder : lFolders) { @@ -196,7 +196,7 @@ void StorageHolder::commitPath(const OUString& sPath) // SAFE -> ------------------------------ { - osl::MutexGuard aReadLock(m_mutex); + std::unique_lock aReadLock(m_mutex); xCommit.set(m_xRoot, css::uno::UNO_QUERY); } // <- SAFE ------------------------------ @@ -223,7 +223,7 @@ void StorageHolder::closePath(const OUString& rPath) sParentPath = sCurrentRelPath; } - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); std::vector<OUString>::reverse_iterator pIt2; for ( pIt2 = lFolders.rbegin(); @@ -249,7 +249,7 @@ void StorageHolder::notifyPath(const OUString& sPath) { OUString sNormedPath = StorageHolder::impl_st_normPath(sPath); - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); TPath2StorageInfo::iterator pIt1 = m_lStorages.find(sNormedPath); if (pIt1 == m_lStorages.end()) @@ -268,7 +268,7 @@ void StorageHolder::addStorageListener( XMLBasedAcceleratorConfiguration* p { OUString sNormedPath = StorageHolder::impl_st_normPath(sPath); - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); TPath2StorageInfo::iterator pIt1 = m_lStorages.find(sNormedPath); if (pIt1 == m_lStorages.end()) @@ -285,7 +285,7 @@ void StorageHolder::removeStorageListener( XMLBasedAcceleratorConfiguration { OUString sNormedPath = StorageHolder::impl_st_normPath(sPath); - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); TPath2StorageInfo::iterator pIt1 = m_lStorages.find(sNormedPath); if (pIt1 == m_lStorages.end()) @@ -299,7 +299,7 @@ void StorageHolder::removeStorageListener( XMLBasedAcceleratorConfiguration OUString StorageHolder::getPathOfStorage(const css::uno::Reference< css::embed::XStorage >& xStorage) { - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); for (auto const& lStorage : m_lStorages) { @@ -334,7 +334,7 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::getParentStorage(cons // SAFE -> ---------------------------------- { - osl::MutexGuard aReadLock(m_mutex); + std::unique_lock aReadLock(m_mutex); // b) if (c < 2) @@ -361,7 +361,7 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::getParentStorage(cons StorageHolder& StorageHolder::operator=(const StorageHolder& rCopy) { - osl::MutexGuard g(m_mutex); + std::unique_lock g(m_mutex); m_xRoot = rCopy.m_xRoot; m_lStorages = rCopy.m_lStorages; return *this; diff --git a/framework/source/inc/accelerators/storageholder.hxx b/framework/source/inc/accelerators/storageholder.hxx index 22a301277cd7..d2e17ee1a550 100644 --- a/framework/source/inc/accelerators/storageholder.hxx +++ b/framework/source/inc/accelerators/storageholder.hxx @@ -21,6 +21,7 @@ #include <com/sun/star/embed/XStorage.hpp> +#include <mutex> #include <unordered_map> #include <vector> @@ -60,7 +61,7 @@ class StorageHolder final // member private: - mutable osl::Mutex m_mutex; + mutable std::mutex m_mutex; /** @short TODO */ css::uno::Reference< css::embed::XStorage > m_xRoot; commit 71f27d514549b7354f2c7b759c661e689e586162 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Dec 18 21:58:57 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Dec 20 08:33:37 2021 +0100 use cppu::BaseMutex in SvXMLEmbeddedObjectHelper because passing a ref of a local member to a parent class means passing uninitialised data Change-Id: I8ebfce789da19538379cfa0888a63a9b31d35a0b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127118 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/svx/xmleohlp.hxx b/include/svx/xmleohlp.hxx index d252ee8e2d0f..38ea69ffa053 100644 --- a/include/svx/xmleohlp.hxx +++ b/include/svx/xmleohlp.hxx @@ -20,6 +20,7 @@ #ifndef INCLUDED_SVX_XMLEOHLP_HXX #define INCLUDED_SVX_XMLEOHLP_HXX +#include <cppuhelper/basemutex.hxx> #include <cppuhelper/compbase.hxx> #include <osl/mutex.hxx> #include <com/sun/star/document/XEmbeddedObjectResolver.hpp> @@ -45,10 +46,9 @@ class OutputStorageWrapper_Impl; class SVXCORE_DLLPUBLIC SvXMLEmbeddedObjectHelper final : + public cppu::BaseMutex, public cppu::WeakComponentImplHelper< css::document::XEmbeddedObjectResolver, css::container::XNameAccess > { - ::osl::Mutex maMutex; - OUString maCurContainerStorageName; diff --git a/svx/source/xml/xmleohlp.cxx b/svx/source/xml/xmleohlp.cxx index 6db555d8ddb0..0f33e96c03a1 100644 --- a/svx/source/xml/xmleohlp.cxx +++ b/svx/source/xml/xmleohlp.cxx @@ -120,14 +120,14 @@ void SAL_CALL OutputStorageWrapper_Impl::closeOutput() } SvXMLEmbeddedObjectHelper::SvXMLEmbeddedObjectHelper() : - WeakComponentImplHelper< XEmbeddedObjectResolver, XNameAccess >( maMutex ), + WeakComponentImplHelper< XEmbeddedObjectResolver, XNameAccess >( m_aMutex ), mpDocPersist( nullptr ), meCreateMode( SvXMLEmbeddedObjectHelperMode::Read ) { } SvXMLEmbeddedObjectHelper::SvXMLEmbeddedObjectHelper( ::comphelper::IEmbeddedHelper& rDocPersist, SvXMLEmbeddedObjectHelperMode eCreateMode ) : - WeakComponentImplHelper< XEmbeddedObjectResolver, XNameAccess >( maMutex ), + WeakComponentImplHelper< XEmbeddedObjectResolver, XNameAccess >( m_aMutex ), mpDocPersist( nullptr ), meCreateMode( SvXMLEmbeddedObjectHelperMode::Read ) { @@ -546,7 +546,7 @@ rtl::Reference<SvXMLEmbeddedObjectHelper> SvXMLEmbeddedObjectHelper::Create( OUString SAL_CALL SvXMLEmbeddedObjectHelper::resolveEmbeddedObjectURL(const OUString& rURL) { - MutexGuard aGuard( maMutex ); + MutexGuard aGuard( m_aMutex ); OUString sRet; try @@ -571,7 +571,7 @@ OUString SAL_CALL SvXMLEmbeddedObjectHelper::resolveEmbeddedObjectURL(const OUSt Any SAL_CALL SvXMLEmbeddedObjectHelper::getByName( const OUString& rURLStr ) { - MutexGuard aGuard( maMutex ); + MutexGuard aGuard( m_aMutex ); Any aRet; if( SvXMLEmbeddedObjectHelperMode::Read == meCreateMode ) { @@ -672,7 +672,7 @@ Sequence< OUString > SAL_CALL SvXMLEmbeddedObjectHelper::getElementNames() sal_Bool SAL_CALL SvXMLEmbeddedObjectHelper::hasByName( const OUString& rURLStr ) { - MutexGuard aGuard( maMutex ); + MutexGuard aGuard( m_aMutex ); if( SvXMLEmbeddedObjectHelperMode::Read == meCreateMode ) { return true; @@ -694,7 +694,7 @@ sal_Bool SAL_CALL SvXMLEmbeddedObjectHelper::hasByName( const OUString& rURLStr // XNameAccess Type SAL_CALL SvXMLEmbeddedObjectHelper::getElementType() { - MutexGuard aGuard( maMutex ); + MutexGuard aGuard( m_aMutex ); if( SvXMLEmbeddedObjectHelperMode::Read == meCreateMode ) return cppu::UnoType<XOutputStream>::get(); else @@ -703,7 +703,7 @@ Type SAL_CALL SvXMLEmbeddedObjectHelper::getElementType() sal_Bool SAL_CALL SvXMLEmbeddedObjectHelper::hasElements() { - MutexGuard aGuard( maMutex ); + MutexGuard aGuard( m_aMutex ); if( SvXMLEmbeddedObjectHelperMode::Read == meCreateMode ) { return true;