summaryrefslogtreecommitdiff
path: root/ucb
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2022-05-08 21:24:32 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-05-10 19:39:36 +0200
commit3816184ee779f32d2210c8fcc9f7dd2c77b6f736 (patch)
treeba9be70a02cb7a47db2f0c891421f610a2bc040c /ucb
parent3b2888fe0971b07d647a29467c317ba42a51b832 (diff)
osl::Mutex->std::mutex in ucb::BaseContent
Change-Id: I03c25405b7e4206d6c81bc9c98b6cb07e376cd01 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134084 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'ucb')
-rw-r--r--ucb/source/ucp/file/bc.cxx160
-rw-r--r--ucb/source/ucp/file/bc.hxx14
-rw-r--r--ucb/source/ucp/file/filnot.cxx2
3 files changed, 63 insertions, 113 deletions
diff --git a/ucb/source/ucp/file/bc.cxx b/ucb/source/ucp/file/bc.cxx
index e4ed0f180333..03590d3e0173 100644
--- a/ucb/source/ucp/file/bc.cxx
+++ b/ucb/source/ucp/file/bc.cxx
@@ -54,63 +54,42 @@ using namespace com::sun::star::ucb;
class fileaccess::PropertyListeners
{
- typedef comphelper::OInterfaceContainerHelper3<beans::XPropertiesChangeListener> ContainerHelper;
- osl::Mutex& rMutex;
+ typedef comphelper::OInterfaceContainerHelper4<beans::XPropertiesChangeListener> ContainerHelper;
std::unordered_map<OUString, ContainerHelper> m_aMap;
+
public:
- explicit PropertyListeners( ::osl::Mutex& aMutex )
- : rMutex( aMutex )
- {
- }
- void disposeAndClear(const lang::EventObject& rEvt)
+ void disposeAndClear(std::unique_lock<std::mutex>& rGuard, const lang::EventObject& rEvt)
{
// create a copy, because do not fire event in a guarded section
- std::unordered_map<OUString, ContainerHelper> tempMap;
- {
- ::osl::MutexGuard aGuard(rMutex);
- tempMap = std::move(m_aMap);
- }
+ std::unordered_map<OUString, ContainerHelper> tempMap = std::move(m_aMap);
for (auto& rPair : tempMap)
- rPair.second.disposeAndClear(rEvt);
+ rPair.second.disposeAndClear(rGuard, rEvt);
}
- void addInterface(const OUString& rKey, const uno::Reference<beans::XPropertiesChangeListener>& rListener)
+ void addInterface(std::unique_lock<std::mutex>& rGuard, const OUString& rKey, const uno::Reference<beans::XPropertiesChangeListener>& rListener)
{
- ::osl::MutexGuard aGuard(rMutex);
- auto iter = m_aMap.find(rKey);
- if (iter == m_aMap.end())
- {
- auto ret = m_aMap.emplace(rKey, rMutex);
- ret.first->second.addInterface(rListener);
- }
- else
- iter->second.addInterface(rListener);
+ m_aMap[rKey].addInterface(rGuard, rListener);
}
- void removeInterface(const OUString& rKey, const uno::Reference<beans::XPropertiesChangeListener>& rListener)
+ void removeInterface(std::unique_lock<std::mutex>& rGuard, const OUString& rKey, const uno::Reference<beans::XPropertiesChangeListener>& rListener)
{
- ::osl::MutexGuard aGuard(rMutex);
-
// search container with id rKey
auto iter = m_aMap.find(rKey);
// container found?
if (iter != m_aMap.end())
- iter->second.removeInterface(rListener);
+ iter->second.removeInterface(rGuard, rListener);
}
- std::vector< OUString > getContainedTypes() const
+ std::vector< OUString > getContainedTypes(std::unique_lock<std::mutex>& rGuard) const
{
- ::osl::MutexGuard aGuard(rMutex);
std::vector<OUString> aInterfaceTypes;
aInterfaceTypes.reserve(m_aMap.size());
for (const auto& rPair : m_aMap)
// are interfaces added to this container?
- if (rPair.second.getLength())
+ if (rPair.second.getLength(rGuard))
// yes, put the type in the array
aInterfaceTypes.push_back(rPair.first);
return aInterfaceTypes;
}
- comphelper::OInterfaceContainerHelper3<beans::XPropertiesChangeListener>* getContainer(const OUString& rKey)
+ comphelper::OInterfaceContainerHelper4<beans::XPropertiesChangeListener>* getContainer(std::unique_lock<std::mutex>& , const OUString& rKey)
{
- ::osl::MutexGuard aGuard(rMutex);
-
auto iter = m_aMap.find(rKey);
if (iter != m_aMap.end())
return &iter->second;
@@ -174,23 +153,18 @@ BaseContent::~BaseContent( )
void SAL_CALL
BaseContent::addEventListener( const Reference< lang::XEventListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
- if ( ! m_pDisposeEventListeners )
- m_pDisposeEventListeners.reset(
- new comphelper::OInterfaceContainerHelper3<lang::XEventListener>( m_aEventListenerMutex ) );
-
- m_pDisposeEventListeners->addInterface( Listener );
+ m_aDisposeEventListeners.addInterface( aGuard, Listener );
}
void SAL_CALL
BaseContent::removeEventListener( const Reference< lang::XEventListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
- if ( m_pDisposeEventListeners )
- m_pDisposeEventListeners->removeInterface( Listener );
+ m_aDisposeEventListeners.removeInterface( aGuard, Listener );
}
@@ -198,32 +172,19 @@ void SAL_CALL
BaseContent::dispose()
{
lang::EventObject aEvt;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<lang::XEventListener>> pDisposeEventListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<XContentEventListener>> pContentEventListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<beans::XPropertySetInfoChangeListener>> pPropertySetInfoChangeListeners;
- std::unique_ptr<PropertyListeners> pPropertyListener;
-
- {
- osl::MutexGuard aGuard( m_aMutex );
- aEvt.Source = static_cast< XContent* >( this );
+ aEvt.Source = static_cast< XContent* >( this );
- pDisposeEventListeners = std::move(m_pDisposeEventListeners);
- pContentEventListeners = std::move(m_pContentEventListeners);
- pPropertySetInfoChangeListeners = std::move(m_pPropertySetInfoChangeListeners);
- pPropertyListener = std::move(m_pPropertyListener);
- }
+ std::unique_lock aGuard( m_aMutex );
- if ( pDisposeEventListeners && pDisposeEventListeners->getLength() )
- pDisposeEventListeners->disposeAndClear( aEvt );
+ std::unique_ptr<PropertyListeners> pPropertyListener = std::move(m_pPropertyListener);
- if ( pContentEventListeners && pContentEventListeners->getLength() )
- pContentEventListeners->disposeAndClear( aEvt );
+ m_aDisposeEventListeners.disposeAndClear( aGuard, aEvt );
+ m_aContentEventListeners.disposeAndClear( aGuard, aEvt );
if( pPropertyListener )
- pPropertyListener->disposeAndClear( aEvt );
+ pPropertyListener->disposeAndClear( aGuard, aEvt );
- if( pPropertySetInfoChangeListeners )
- pPropertySetInfoChangeListeners->disposeAndClear( aEvt );
+ m_aPropertySetInfoChangeListeners.disposeAndClear( aGuard, aEvt );
}
// XServiceInfo
@@ -380,20 +341,20 @@ BaseContent::addPropertiesChangeListener(
if( ! Listener.is() )
return;
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if( ! m_pPropertyListener )
- m_pPropertyListener.reset( new PropertyListeners( m_aEventListenerMutex ) );
+ m_pPropertyListener.reset( new PropertyListeners );
if( !PropertyNames.hasElements() )
- m_pPropertyListener->addInterface( OUString(),Listener );
+ m_pPropertyListener->addInterface( aGuard, OUString(),Listener );
else
{
Reference< beans::XPropertySetInfo > xProp = m_pMyShell->info_p( m_aUncPath );
for( const auto& rName : PropertyNames )
if( xProp->hasPropertyByName( rName ) )
- m_pPropertyListener->addInterface( rName,Listener );
+ m_pPropertyListener->addInterface( aGuard, rName,Listener );
}
}
@@ -405,15 +366,15 @@ BaseContent::removePropertiesChangeListener( const Sequence< OUString >& Propert
if( ! Listener.is() )
return;
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if( ! m_pPropertyListener )
return;
for( const auto& rName : PropertyNames )
- m_pPropertyListener->removeInterface( rName,Listener );
+ m_pPropertyListener->removeInterface( aGuard, rName,Listener );
- m_pPropertyListener->removeInterface( OUString(), Listener );
+ m_pPropertyListener->removeInterface( aGuard, OUString(), Listener );
}
@@ -474,14 +435,9 @@ void SAL_CALL
BaseContent::addContentEventListener(
const Reference< XContentEventListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( ! m_pContentEventListeners )
- m_pContentEventListeners.reset(
- new comphelper::OInterfaceContainerHelper3<XContentEventListener>( m_aEventListenerMutex ) );
-
+ std::unique_lock aGuard( m_aMutex );
- m_pContentEventListeners->addInterface( Listener );
+ m_aContentEventListeners.addInterface( aGuard, Listener );
}
@@ -489,10 +445,9 @@ void SAL_CALL
BaseContent::removeContentEventListener(
const Reference< XContentEventListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
- if ( m_pContentEventListeners )
- m_pContentEventListeners->removeInterface( Listener );
+ m_aContentEventListeners.removeInterface( aGuard, Listener );
}
@@ -594,11 +549,9 @@ void SAL_CALL
BaseContent::addPropertySetInfoChangeListener(
const Reference< beans::XPropertySetInfoChangeListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
- if( ! m_pPropertySetInfoChangeListeners )
- m_pPropertySetInfoChangeListeners.reset( new comphelper::OInterfaceContainerHelper3<beans::XPropertySetInfoChangeListener>( m_aEventListenerMutex ) );
+ std::unique_lock aGuard( m_aMutex );
- m_pPropertySetInfoChangeListeners->addInterface( Listener );
+ m_aPropertySetInfoChangeListeners.addInterface( aGuard, Listener );
}
@@ -606,10 +559,9 @@ void SAL_CALL
BaseContent::removePropertySetInfoChangeListener(
const Reference< beans::XPropertySetInfoChangeListener >& Listener )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
- if( m_pPropertySetInfoChangeListeners )
- m_pPropertySetInfoChangeListeners->removeInterface( Listener );
+ m_aPropertySetInfoChangeListeners.removeInterface( aGuard, Listener );
}
@@ -942,7 +894,7 @@ BaseContent::deleteContent( sal_Int32 nMyCommandIdentifier )
if( m_pMyShell->remove( nMyCommandIdentifier,m_aUncPath ) )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
m_nState |= Deleted;
}
}
@@ -1119,7 +1071,7 @@ void BaseContent::insert( sal_Int32 nMyCommandIdentifier,
m_pMyShell->registerNotifier( m_aUncPath,this );
m_pMyShell->insertDefaultProperties( m_aUncPath );
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
m_nState = FullFeatured;
}
@@ -1134,80 +1086,80 @@ void BaseContent::endTask( sal_Int32 CommandId )
std::optional<ContentEventNotifier>
BaseContent::cDEL()
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
m_nState |= Deleted;
- if( !m_pContentEventListeners )
+ if( m_aContentEventListeners.getLength(aGuard) == 0 )
return {};
return ContentEventNotifier( m_pMyShell,
this,
m_xContentIdentifier,
- m_pContentEventListeners->getElements() );
+ m_aContentEventListeners.getElements(aGuard) );
}
std::optional<ContentEventNotifier>
BaseContent::cEXC( const OUString& aNewName )
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
Reference< XContentIdentifier > xOldRef = m_xContentIdentifier;
m_aUncPath = aNewName;
m_xContentIdentifier = new FileContentIdentifier( aNewName );
- if( !m_pContentEventListeners )
+ if( m_aContentEventListeners.getLength(aGuard) == 0 )
return {};
return ContentEventNotifier( m_pMyShell,
this,
m_xContentIdentifier,
xOldRef,
- m_pContentEventListeners->getElements() );
+ m_aContentEventListeners.getElements(aGuard) );
}
std::optional<ContentEventNotifier>
BaseContent::cCEL()
{
- osl::MutexGuard aGuard( m_aMutex );
- if( !m_pContentEventListeners )
+ std::unique_lock aGuard( m_aMutex );
+ if( m_aContentEventListeners.getLength(aGuard) == 0 )
return {};
return ContentEventNotifier( m_pMyShell,
this,
m_xContentIdentifier,
- m_pContentEventListeners->getElements() );
+ m_aContentEventListeners.getElements(aGuard) );
}
std::optional<PropertySetInfoChangeNotifier>
BaseContent::cPSL()
{
- osl::MutexGuard aGuard( m_aMutex );
- if( !m_pPropertySetInfoChangeListeners )
+ std::unique_lock aGuard( m_aMutex );
+ if( m_aPropertySetInfoChangeListeners.getLength(aGuard) == 0 )
return {};
- return PropertySetInfoChangeNotifier( this, m_pPropertySetInfoChangeListeners->getElements() );
+ return PropertySetInfoChangeNotifier( this, m_aPropertySetInfoChangeListeners.getElements(aGuard) );
}
std::optional<PropertyChangeNotifier>
BaseContent::cPCL()
{
- osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if (!m_pPropertyListener)
return {};
- const std::vector< OUString > seqNames = m_pPropertyListener->getContainedTypes();
+ const std::vector< OUString > seqNames = m_pPropertyListener->getContainedTypes(aGuard);
if( seqNames.empty() )
return {};
ListenerMap listener;
for( const auto& rName : seqNames )
{
- comphelper::OInterfaceContainerHelper3<beans::XPropertiesChangeListener>* pContainer = m_pPropertyListener->getContainer(rName);
+ comphelper::OInterfaceContainerHelper4<beans::XPropertiesChangeListener>* pContainer = m_pPropertyListener->getContainer(aGuard, rName);
if (!pContainer)
continue;
- listener[rName] = pContainer->getElements();
+ listener[rName] = pContainer->getElements(aGuard);
}
return PropertyChangeNotifier( this, std::move(listener) );
diff --git a/ucb/source/ucp/file/bc.hxx b/ucb/source/ucp/file/bc.hxx
index fff14a09ecbe..a9afbdd5002c 100644
--- a/ucb/source/ucp/file/bc.hxx
+++ b/ucb/source/ucp/file/bc.hxx
@@ -19,10 +19,10 @@
#pragma once
-#include <osl/mutex.hxx>
+#include <mutex>
#include <rtl/ustring.hxx>
#include <cppuhelper/implbase.hxx>
-#include <comphelper/interfacecontainer3.hxx>
+#include <comphelper/interfacecontainer4.hxx>
#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/ucb/XCommandProcessor.hpp>
@@ -203,12 +203,10 @@ namespace fileaccess {
bool m_bFolder;
sal_uInt16 m_nState;
- osl::Mutex m_aMutex;
-
- osl::Mutex m_aEventListenerMutex;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::lang::XEventListener>> m_pDisposeEventListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::ucb::XContentEventListener>> m_pContentEventListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::beans::XPropertySetInfoChangeListener>> m_pPropertySetInfoChangeListeners;
+ std::mutex m_aMutex;
+ comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aDisposeEventListeners;
+ comphelper::OInterfaceContainerHelper4<css::ucb::XContentEventListener> m_aContentEventListeners;
+ comphelper::OInterfaceContainerHelper4<css::beans::XPropertySetInfoChangeListener> m_aPropertySetInfoChangeListeners;
std::unique_ptr<PropertyListeners> m_pPropertyListener;
diff --git a/ucb/source/ucp/file/filnot.cxx b/ucb/source/ucp/file/filnot.cxx
index 013311e2d1bc..d384dc0ea717 100644
--- a/ucb/source/ucp/file/filnot.cxx
+++ b/ucb/source/ucp/file/filnot.cxx
@@ -91,7 +91,7 @@ void ContentEventNotifier::notifyRemoved( const OUString& aChildName ) const
rtl::Reference<BaseContent> pp = new BaseContent( m_pMyShell,xChildId,aChildName );
{
- osl::MutexGuard aGuard( pp->m_aMutex );
+ std::unique_lock aGuard( pp->m_aMutex );
pp->m_nState |= BaseContent::Deleted;
}