summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--basic/source/classes/sbunoobj.cxx4
-rw-r--r--chart2/source/tools/ModifyListenerHelper.cxx10
-rw-r--r--chart2/source/tools/RangeHighlighter.cxx20
-rw-r--r--comphelper/source/misc/accessibleeventnotifier.cxx16
-rw-r--r--comphelper/source/misc/compbase.cxx4
-rw-r--r--comphelper/source/misc/instancelocker.cxx8
-rw-r--r--editeng/source/uno/unotext2.cxx4
-rw-r--r--framework/source/uiconfiguration/imagemanagerimpl.cxx12
-rw-r--r--framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx12
-rw-r--r--framework/source/uiconfiguration/uiconfigurationmanager.cxx12
-rw-r--r--include/comphelper/interfacecontainer4.hxx87
-rw-r--r--include/comphelper/multiinterfacecontainer4.hxx17
-rw-r--r--include/vcl/weldutils.hxx24
-rw-r--r--sc/source/ui/Accessibility/DrawModelBroadcaster.cxx24
-rw-r--r--scripting/source/stringresource/stringresource.cxx61
-rw-r--r--scripting/source/stringresource/stringresource.hxx12
-rw-r--r--sd/source/ui/slideshow/slideshowviewimpl.cxx40
-rw-r--r--sd/source/ui/slideshow/slideshowviewimpl.hxx4
-rw-r--r--sfx2/inc/unoctitm.hxx2
-rw-r--r--sfx2/source/control/unoctitm.cxx21
-rw-r--r--sfx2/source/doc/printhelper.cxx8
-rw-r--r--sfx2/source/notify/globalevents.cxx52
-rw-r--r--sfx2/source/view/viewsh.cxx28
-rw-r--r--svl/source/fsstor/oinputstreamcontainer.cxx8
-rw-r--r--svl/source/fsstor/ostreamcontainer.cxx8
-rw-r--r--svx/source/table/tabledesign.cxx12
-rw-r--r--svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx4
-rw-r--r--sw/source/core/unocore/unobkm.cxx4
-rw-r--r--sw/source/core/unocore/unochart.cxx23
-rw-r--r--sw/source/core/unocore/unofield.cxx37
-rw-r--r--sw/source/core/unocore/unoframe.cxx8
-rw-r--r--sw/source/core/unocore/unoftn.cxx4
-rw-r--r--sw/source/core/unocore/unoidx.cxx4
-rw-r--r--sw/source/core/unocore/unoparagraph.cxx4
-rw-r--r--sw/source/core/unocore/unorefmk.cxx8
-rw-r--r--sw/source/core/unocore/unosect.cxx4
-rw-r--r--sw/source/core/unocore/unotbl.cxx32
-rw-r--r--sw/source/uibase/uno/unotxdoc.cxx8
-rw-r--r--toolkit/source/controls/grid/gridcolumn.cxx7
-rw-r--r--toolkit/source/hatchwindow/documentcloser.cxx4
-rw-r--r--ucbhelper/source/provider/resultset.cxx16
-rw-r--r--ucbhelper/source/provider/resultsethelper.cxx6
42 files changed, 349 insertions, 334 deletions
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
index 97e217ca8ba5..999972c94744 100644
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -4364,13 +4364,13 @@ void SAL_CALL ModuleInvocationProxy::dispose()
void SAL_CALL ModuleInvocationProxy::addEventListener( const Reference< XEventListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- m_aListeners.addInterface( xListener );
+ m_aListeners.addInterface( aGuard, xListener );
}
void SAL_CALL ModuleInvocationProxy::removeEventListener( const Reference< XEventListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- m_aListeners.removeInterface( xListener );
+ m_aListeners.removeInterface( aGuard, xListener );
}
diff --git a/chart2/source/tools/ModifyListenerHelper.cxx b/chart2/source/tools/ModifyListenerHelper.cxx
index b05d6210aba7..0213e97d9720 100644
--- a/chart2/source/tools/ModifyListenerHelper.cxx
+++ b/chart2/source/tools/ModifyListenerHelper.cxx
@@ -38,23 +38,25 @@ void SAL_CALL ModifyEventForwarder::addModifyListener( const Reference< util::XM
{
std::unique_lock aGuard(m_aMutex);
- m_aModifyListeners.addInterface( aListener );
+ m_aModifyListeners.addInterface( aGuard, aListener );
}
void SAL_CALL ModifyEventForwarder::removeModifyListener( const Reference< util::XModifyListener >& aListener )
{
std::unique_lock aGuard(m_aMutex);
- m_aModifyListeners.removeInterface( aListener );
+ m_aModifyListeners.removeInterface( aGuard, aListener );
}
// ____ XModifyListener ____
void SAL_CALL ModifyEventForwarder::modified( const lang::EventObject& aEvent )
{
- if( m_aModifyListeners.getLength() == 0 )
+ std::unique_lock aGuard(m_aMutex);
+
+ if( m_aModifyListeners.getLength(aGuard) == 0 )
return;
- m_aModifyListeners.notifyEach( &util::XModifyListener::modified, aEvent );
+ m_aModifyListeners.notifyEach( aGuard, &util::XModifyListener::modified, aEvent );
}
// ____ XEventListener (base of XModifyListener) ____
diff --git a/chart2/source/tools/RangeHighlighter.cxx b/chart2/source/tools/RangeHighlighter.cxx
index 247daaaae7e0..4a7e4be66ca0 100644
--- a/chart2/source/tools/RangeHighlighter.cxx
+++ b/chart2/source/tools/RangeHighlighter.cxx
@@ -306,7 +306,8 @@ void SAL_CALL RangeHighlighter::addSelectionChangeListener( const Reference< vie
if( m_nAddedListenerCount == 0 )
startListening();
- maSelectionChangeListeners.addInterface( xListener);
+ std::unique_lock g(m_aMutex);
+ maSelectionChangeListeners.addInterface( g, xListener);
++m_nAddedListenerCount;
//bring the new listener up to the current state
@@ -316,7 +317,8 @@ void SAL_CALL RangeHighlighter::addSelectionChangeListener( const Reference< vie
void SAL_CALL RangeHighlighter::removeSelectionChangeListener( const Reference< view::XSelectionChangeListener >& xListener )
{
- maSelectionChangeListeners.removeInterface( xListener );
+ std::unique_lock g(m_aMutex);
+ maSelectionChangeListeners.removeInterface( g, xListener );
--m_nAddedListenerCount;
if( m_nAddedListenerCount == 0 )
stopListening();
@@ -334,14 +336,16 @@ void SAL_CALL RangeHighlighter::selectionChanged( const lang::EventObject& /*aEv
void RangeHighlighter::fireSelectionEvent()
{
- if( maSelectionChangeListeners.getLength() )
+ std::unique_lock g(m_aMutex);
+ if( maSelectionChangeListeners.getLength(g) )
{
lang::EventObject aEvent( static_cast< lang::XComponent* >( this ) );
- comphelper::OInterfaceIteratorHelper4 aIt( maSelectionChangeListeners );
- while( aIt.hasMoreElements() )
- {
- aIt.next()->selectionChanged( aEvent );
- }
+ maSelectionChangeListeners.forEach(g,
+ [&aEvent](const css::uno::Reference<view::XSelectionChangeListener>& xListener)
+ {
+ xListener->selectionChanged(aEvent);
+ }
+ );
}
}
diff --git a/comphelper/source/misc/accessibleeventnotifier.cxx b/comphelper/source/misc/accessibleeventnotifier.cxx
index c1e26c35bdd9..f8bd5a1170e8 100644
--- a/comphelper/source/misc/accessibleeventnotifier.cxx
+++ b/comphelper/source/misc/accessibleeventnotifier.cxx
@@ -209,7 +209,7 @@ void AccessibleEventNotifier::revokeClientNotifyDisposing(
sal_Int32 AccessibleEventNotifier::addEventListener(
const TClientId _nClient, const Reference< XAccessibleEventListener >& _rxListener )
{
- std::scoped_lock aGuard( GetLocalMutex() );
+ std::unique_lock aGuard( GetLocalMutex() );
ClientMap::iterator aClientPos;
if ( !implLookupClient( _nClient, aClientPos ) )
@@ -217,15 +217,15 @@ sal_Int32 AccessibleEventNotifier::addEventListener(
return 0;
if ( _rxListener.is() )
- aClientPos->second->addInterface( _rxListener );
+ aClientPos->second->addInterface( aGuard, _rxListener );
- return aClientPos->second->getLength();
+ return aClientPos->second->getLength(aGuard);
}
sal_Int32 AccessibleEventNotifier::removeEventListener(
const TClientId _nClient, const Reference< XAccessibleEventListener >& _rxListener )
{
- std::scoped_lock aGuard( GetLocalMutex() );
+ std::unique_lock aGuard( GetLocalMutex() );
ClientMap::iterator aClientPos;
if ( !implLookupClient( _nClient, aClientPos ) )
@@ -233,9 +233,9 @@ sal_Int32 AccessibleEventNotifier::removeEventListener(
return 0;
if ( _rxListener.is() )
- aClientPos->second->removeInterface( _rxListener );
+ aClientPos->second->removeInterface( aGuard, _rxListener );
- return aClientPos->second->getLength();
+ return aClientPos->second->getLength(aGuard);
}
void AccessibleEventNotifier::addEvent( const TClientId _nClient, const AccessibleEventObject& _rEvent )
@@ -243,7 +243,7 @@ void AccessibleEventNotifier::addEvent( const TClientId _nClient, const Accessib
std::vector< Reference< XAccessibleEventListener > > aListeners;
{
- std::scoped_lock aGuard( GetLocalMutex() );
+ std::unique_lock aGuard( GetLocalMutex() );
ClientMap::iterator aClientPos;
if ( !implLookupClient( _nClient, aClientPos ) )
@@ -251,7 +251,7 @@ void AccessibleEventNotifier::addEvent( const TClientId _nClient, const Accessib
return;
// since we're synchronous, again, we want to notify immediately
- aListeners = aClientPos->second->getElements();
+ aListeners = aClientPos->second->getElements(aGuard);
}
// default handling: loop through all listeners, and notify them
diff --git a/comphelper/source/misc/compbase.cxx b/comphelper/source/misc/compbase.cxx
index ff3c4778b2ba..f8a8897b7bb7 100644
--- a/comphelper/source/misc/compbase.cxx
+++ b/comphelper/source/misc/compbase.cxx
@@ -37,14 +37,14 @@ void SAL_CALL WeakComponentImplHelperBase::addEventListener(
std::unique_lock aGuard(m_aMutex);
if (m_bDisposed)
return;
- maEventListeners.addInterface(rxListener);
+ maEventListeners.addInterface(aGuard, rxListener);
}
void SAL_CALL WeakComponentImplHelperBase::removeEventListener(
css::uno::Reference<css::lang::XEventListener> const& rxListener)
{
std::unique_lock aGuard(m_aMutex);
- maEventListeners.removeInterface(rxListener);
+ maEventListeners.removeInterface(aGuard, rxListener);
}
css::uno::Any SAL_CALL WeakComponentImplHelperBase::queryInterface(css::uno::Type const& rType)
diff --git a/comphelper/source/misc/instancelocker.cxx b/comphelper/source/misc/instancelocker.cxx
index a24572c6c865..347ff513cb6e 100644
--- a/comphelper/source/misc/instancelocker.cxx
+++ b/comphelper/source/misc/instancelocker.cxx
@@ -87,18 +87,18 @@ void SAL_CALL OInstanceLocker::dispose()
void SAL_CALL OInstanceLocker::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if ( m_bDisposed )
throw lang::DisposedException(); // TODO
- m_aListenersContainer.addInterface( xListener );
+ m_aListenersContainer.addInterface( aGuard, xListener );
}
void SAL_CALL OInstanceLocker::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
- m_aListenersContainer.removeInterface( xListener );
+ std::unique_lock aGuard( m_aMutex );
+ m_aListenersContainer.removeInterface( aGuard, xListener );
}
// XInitialization
diff --git a/editeng/source/uno/unotext2.cxx b/editeng/source/uno/unotext2.cxx
index 275319f3dfe7..66f094a00e6a 100644
--- a/editeng/source/uno/unotext2.cxx
+++ b/editeng/source/uno/unotext2.cxx
@@ -242,13 +242,13 @@ void SAL_CALL SvxUnoTextContent::dispose()
void SAL_CALL SvxUnoTextContent::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
std::unique_lock aGuard(maDisposeContainerMutex);
- maDisposeListeners.addInterface(xListener);
+ maDisposeListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SvxUnoTextContent::removeEventListener( const uno::Reference< lang::XEventListener >& aListener )
{
std::unique_lock aGuard(maDisposeContainerMutex);
- maDisposeListeners.removeInterface(aListener);
+ maDisposeListeners.removeInterface(aGuard, aListener);
}
// XEnumerationAccess
diff --git a/framework/source/uiconfiguration/imagemanagerimpl.cxx b/framework/source/uiconfiguration/imagemanagerimpl.cxx
index 1dd41fd38bdf..fd18bb9b7c06 100644
--- a/framework/source/uiconfiguration/imagemanagerimpl.cxx
+++ b/framework/source/uiconfiguration/imagemanagerimpl.cxx
@@ -537,14 +537,14 @@ void ImageManagerImpl::addEventListener( const uno::Reference< XEventListener >&
}
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.addInterface( xListener );
+ m_aEventListeners.addInterface( aGuard, xListener );
}
void ImageManagerImpl::removeEventListener( const uno::Reference< XEventListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.removeInterface( xListener );
+ m_aEventListeners.removeInterface( aGuard, xListener );
}
// XInitialization
@@ -1154,20 +1154,20 @@ void ImageManagerImpl::addConfigurationListener( const uno::Reference< css::ui::
}
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.addInterface( xListener );
+ m_aConfigListeners.addInterface( aGuard, xListener );
}
void ImageManagerImpl::removeConfigurationListener( const uno::Reference< css::ui::XUIConfigurationListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.removeInterface( xListener );
+ m_aConfigListeners.removeInterface( aGuard, xListener );
}
void ImageManagerImpl::implts_notifyContainerListener( const ConfigurationEvent& aEvent, NotifyOp eOp )
{
std::unique_lock aGuard(m_mutex);
- comphelper::OInterfaceIteratorHelper4 pIterator( m_aConfigListeners );
+ comphelper::OInterfaceIteratorHelper4 pIterator( aGuard, m_aConfigListeners );
while ( pIterator.hasMoreElements() )
{
try
@@ -1187,7 +1187,7 @@ void ImageManagerImpl::implts_notifyContainerListener( const ConfigurationEvent&
}
catch( const css::uno::RuntimeException& )
{
- pIterator.remove();
+ pIterator.remove(aGuard);
}
}
}
diff --git a/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx b/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx
index 28c2b150f9bb..65ff144913f9 100644
--- a/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx
+++ b/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx
@@ -943,14 +943,14 @@ void SAL_CALL ModuleUIConfigurationManager::addEventListener( const Reference< X
}
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.addInterface( xListener );
+ m_aEventListeners.addInterface( aGuard, xListener );
}
void SAL_CALL ModuleUIConfigurationManager::removeEventListener( const Reference< XEventListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.removeInterface( xListener );
+ m_aEventListeners.removeInterface( aGuard, xListener );
}
// XUIConfiguration
@@ -965,14 +965,14 @@ void SAL_CALL ModuleUIConfigurationManager::addConfigurationListener( const Refe
}
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.addInterface( xListener );
+ m_aConfigListeners.addInterface( aGuard, xListener );
}
void SAL_CALL ModuleUIConfigurationManager::removeConfigurationListener( const Reference< css::ui::XUIConfigurationListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.removeInterface( xListener );
+ m_aConfigListeners.removeInterface( aGuard, xListener );
}
// XUIConfigurationManager
@@ -1623,7 +1623,7 @@ sal_Bool SAL_CALL ModuleUIConfigurationManager::isReadOnly()
void ModuleUIConfigurationManager::implts_notifyContainerListener( const ui::ConfigurationEvent& aEvent, NotifyOp eOp )
{
std::unique_lock aGuard(m_mutex);
- comphelper::OInterfaceIteratorHelper4 pIterator( m_aConfigListeners );
+ comphelper::OInterfaceIteratorHelper4 pIterator( aGuard, m_aConfigListeners );
while ( pIterator.hasMoreElements() )
{
try
@@ -1643,7 +1643,7 @@ void ModuleUIConfigurationManager::implts_notifyContainerListener( const ui::Con
}
catch( const css::uno::RuntimeException& )
{
- pIterator.remove();
+ pIterator.remove(aGuard);
}
}
}
diff --git a/framework/source/uiconfiguration/uiconfigurationmanager.cxx b/framework/source/uiconfiguration/uiconfigurationmanager.cxx
index 002fde84daea..d44f4a45d418 100644
--- a/framework/source/uiconfiguration/uiconfigurationmanager.cxx
+++ b/framework/source/uiconfiguration/uiconfigurationmanager.cxx
@@ -727,14 +727,14 @@ void SAL_CALL UIConfigurationManager::addEventListener( const Reference< XEventL
}
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.addInterface( xListener );
+ m_aEventListeners.addInterface( aGuard, xListener );
}
void SAL_CALL UIConfigurationManager::removeEventListener( const Reference< XEventListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aEventListeners.removeInterface( xListener );
+ m_aEventListeners.removeInterface( aGuard, xListener );
}
// XUIConfigurationManager
@@ -749,14 +749,14 @@ void SAL_CALL UIConfigurationManager::addConfigurationListener( const Reference<
}
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.addInterface( xListener );
+ m_aConfigListeners.addInterface( aGuard, xListener );
}
void SAL_CALL UIConfigurationManager::removeConfigurationListener( const Reference< css::ui::XUIConfigurationListener >& xListener )
{
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
std::unique_lock aGuard(m_mutex);
- m_aConfigListeners.removeInterface( xListener );
+ m_aConfigListeners.removeInterface( aGuard, xListener );
}
void SAL_CALL UIConfigurationManager::reset()
@@ -1347,7 +1347,7 @@ sal_Bool SAL_CALL UIConfigurationManager::isReadOnly()
void UIConfigurationManager::implts_notifyContainerListener( const ConfigurationEvent& aEvent, NotifyOp eOp )
{
std::unique_lock aGuard(m_mutex);
- comphelper::OInterfaceIteratorHelper4 pIterator( m_aConfigListeners );
+ comphelper::OInterfaceIteratorHelper4 pIterator( aGuard, m_aConfigListeners );
while ( pIterator.hasMoreElements() )
{
try
@@ -1367,7 +1367,7 @@ void UIConfigurationManager::implts_notifyContainerListener( const Configuration
}
catch( const css::uno::RuntimeException& )
{
- pIterator.remove();
+ pIterator.remove(aGuard);
}
}
}
diff --git a/include/comphelper/interfacecontainer4.hxx b/include/comphelper/interfacecontainer4.hxx
index e58b958629b9..b8e2079a9201 100644
--- a/include/comphelper/interfacecontainer4.hxx
+++ b/include/comphelper/interfacecontainer4.hxx
@@ -56,8 +56,11 @@ public:
change the contents...
@param rCont the container of the elements.
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
*/
- OInterfaceIteratorHelper4(OInterfaceContainerHelper4<ListenerT>& rCont_)
+ OInterfaceIteratorHelper4(std::unique_lock<std::mutex>& /*rGuard*/,
+ OInterfaceContainerHelper4<ListenerT>& rCont_)
: rCont(rCont_)
, maData(rCont.maData)
, nRemain(maData->size())
@@ -75,8 +78,10 @@ public:
from the underlying container. Calling this method before
next() has been called or calling it twice with no next()
in between is an error.
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
*/
- void remove();
+ void remove(::std::unique_lock<::std::mutex>& rGuard);
private:
OInterfaceContainerHelper4<ListenerT>& rCont;
@@ -94,9 +99,10 @@ const css::uno::Reference<ListenerT>& OInterfaceIteratorHelper4<ListenerT>::next
return (*maData)[nRemain];
}
-template <class ListenerT> void OInterfaceIteratorHelper4<ListenerT>::remove()
+template <class ListenerT>
+void OInterfaceIteratorHelper4<ListenerT>::remove(::std::unique_lock<::std::mutex>& rGuard)
{
- rCont.removeInterface((*maData)[nRemain]);
+ rCont.removeInterface(rGuard, (*maData)[nRemain]);
}
/**
@@ -119,13 +125,18 @@ public:
/**
Return the number of Elements in the container. Only useful if you have acquired
the mutex.
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
*/
- sal_Int32 getLength() const;
+ sal_Int32 getLength(std::unique_lock<std::mutex>& rGuard) const;
/**
Return all interfaces added to this container.
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
**/
- std::vector<css::uno::Reference<ListenerT>> getElements() const;
+ std::vector<css::uno::Reference<ListenerT>>
+ getElements(std::unique_lock<std::mutex>& rGuard) const;
/** Inserts an element into the container. The position is not specified, thus it is not
specified in which order events are fired.
@@ -140,18 +151,24 @@ public:
@param rxIFace
interface to be added; it is allowed to insert
the same interface more than once
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
@return
the new count of elements in the container
*/
- sal_Int32 addInterface(const css::uno::Reference<ListenerT>& rxIFace);
+ sal_Int32 addInterface(std::unique_lock<std::mutex>& rGuard,
+ const css::uno::Reference<ListenerT>& rxIFace);
/** Removes an element from the container. It uses interface equality to remove the interface.
@param rxIFace
interface to be removed
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
@return
the new count of elements in the container
*/
- sal_Int32 removeInterface(const css::uno::Reference<ListenerT>& rxIFace);
+ sal_Int32 removeInterface(std::unique_lock<std::mutex>& rGuard,
+ const css::uno::Reference<ListenerT>& rxIFace);
/**
Call disposing on all object in the container that
support XEventListener. Then clear the container.
@@ -161,8 +178,10 @@ public:
const css::lang::EventObject& rEvt);
/**
Clears the container without calling disposing().
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
*/
- void clear();
+ void clear(::std::unique_lock<::std::mutex>& rGuard);
/** Executes a functor for each contained listener of specified type, e.g.
<code>forEach<awt::XPaintListener>(...</code>.
@@ -173,8 +192,11 @@ public:
@tparam FuncT unary functor type, let your compiler deduce this for you
@param func unary functor object expecting an argument of type
css::uno::Reference<ListenerT>
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
*/
- template <typename FuncT> inline void forEach(FuncT const& func);
+ template <typename FuncT>
+ inline void forEach(std::unique_lock<std::mutex>& rGuard, FuncT const& func);
/** Calls a UNO listener method for each contained listener.
@@ -189,6 +211,8 @@ public:
Pointer to a method of a ListenerT interface.
@param Event
Event to notify to all contained listeners
+ @param rGuard
+ this parameter only here to make that this container is accessed while locked
Example:
@code
@@ -197,7 +221,8 @@ public:
@endcode
*/
template <typename EventT>
- inline void notifyEach(void (SAL_CALL ListenerT::*NotificationMethod)(const EventT&),
+ inline void notifyEach(std::unique_lock<std::mutex>& rGuard,
+ void (SAL_CALL ListenerT::*NotificationMethod)(const EventT&),
const EventT& Event);
private:
@@ -242,9 +267,14 @@ inline OInterfaceContainerHelper4<T>::OInterfaceContainerHelper4()
template <class T>
template <typename FuncT>
-inline void OInterfaceContainerHelper4<T>::forEach(FuncT const& func)
+inline void OInterfaceContainerHelper4<T>::forEach(std::unique_lock<std::mutex>& rGuard,
+ FuncT const& func)
{
- OInterfaceIteratorHelper4<T> iter(*this);
+ if (std::as_const(maData)->size() == 0)
+ return;
+ maData.make_unique(); // so we can iterate over the data without holding the lock
+ OInterfaceIteratorHelper4<T> iter(rGuard, *this);
+ rGuard.unlock();
while (iter.hasMoreElements())
{
auto xListener = iter.next();
@@ -255,34 +285,44 @@ inline void OInterfaceContainerHelper4<T>::forEach(FuncT const& func)
catch (css::lang::DisposedException const& exc)
{
if (exc.Context == xListener)
- iter.remove();
+ {
+ rGuard.lock();
+ iter.remove(rGuard);
+ rGuard.unlock();
+ }
}
}
+ rGuard.lock();
}
template <class ListenerT>
template <typename EventT>
inline void OInterfaceContainerHelper4<ListenerT>::notifyEach(
+ std::unique_lock<std::mutex>& rGuard,
void (SAL_CALL ListenerT::*NotificationMethod)(const EventT&), const EventT& Event)
{
- forEach<NotifySingleListener<EventT>>(NotifySingleListener<EventT>(NotificationMethod, Event));
+ forEach<NotifySingleListener<EventT>>(rGuard,
+ NotifySingleListener<EventT>(NotificationMethod, Event));
}
-template <class ListenerT> sal_Int32 OInterfaceContainerHelper4<ListenerT>::getLength() const
+template <class ListenerT>
+sal_Int32
+OInterfaceContainerHelper4<ListenerT>::getLength(std::unique_lock<std::mutex>& /*rGuard*/) const
{
return maData->size();
}
template <class ListenerT>
std::vector<css::uno::Reference<ListenerT>>
-OInterfaceContainerHelper4<ListenerT>::getElements() const
+OInterfaceContainerHelper4<ListenerT>::getElements(std::unique_lock<std::mutex>& /*rGuard*/) const
{
return *maData;
}
template <class ListenerT>
sal_Int32
-OInterfaceContainerHelper4<ListenerT>::addInterface(const css::uno::Reference<ListenerT>& rListener)
+OInterfaceContainerHelper4<ListenerT>::addInterface(std::unique_lock<std::mutex>& /*rGuard*/,
+ const css::uno::Reference<ListenerT>& rListener)
{
assert(rListener.is());
maData->push_back(rListener);
@@ -291,7 +331,7 @@ OInterfaceContainerHelper4<ListenerT>::addInterface(const css::uno::Reference<Li
template <class ListenerT>
sal_Int32 OInterfaceContainerHelper4<ListenerT>::removeInterface(
- const css::uno::Reference<ListenerT>& rListener)
+ std::unique_lock<std::mutex>& /*rGuard*/, const css::uno::Reference<ListenerT>& rListener)
{
assert(rListener.is());
@@ -315,9 +355,10 @@ template <class ListenerT>
void OInterfaceContainerHelper4<ListenerT>::disposeAndClear(std::unique_lock<std::mutex>& rGuard,
const css::lang::EventObject& rEvt)
{
- OInterfaceIteratorHelper4<ListenerT> aIt(*this);
+ OInterfaceIteratorHelper4<ListenerT> aIt(rGuard, *this);
maData->clear();
rGuard.unlock();
+ // unlock followed by iterating is only safe because we are not going to call remove() on the iterator
while (aIt.hasMoreElements())
{
try
@@ -332,7 +373,11 @@ void OInterfaceContainerHelper4<ListenerT>::disposeAndClear(std::unique_lock<std
}
}
-template <class ListenerT> void OInterfaceContainerHelper4<ListenerT>::clear() { maData->clear(); }
+template <class ListenerT>
+void OInterfaceContainerHelper4<ListenerT>::clear(::std::unique_lock<::std::mutex>& /*rGuard*/)
+{
+ maData->clear();
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/comphelper/multiinterfacecontainer4.hxx b/include/comphelper/multiinterfacecontainer4.hxx
index 5d2457669f0d..eeccd20920ca 100644
--- a/include/comphelper/multiinterfacecontainer4.hxx
+++ b/include/comphelper/multiinterfacecontainer4.hxx
@@ -43,13 +43,13 @@ public:
/**
Return all id's under which at least one interface is added.
*/
- inline std::vector<key> getContainedTypes() const
+ inline std::vector<key> getContainedTypes(std::unique_lock<std::mutex>& rGuard) const
{
std::vector<key> 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;
@@ -91,17 +91,18 @@ public:
@return
the new count of elements in the container
*/
- inline sal_Int32 addInterface(const key& rKey, const css::uno::Reference<listener>& rListener)
+ inline sal_Int32 addInterface(::std::unique_lock<::std::mutex>& rGuard, const key& rKey,
+ const css::uno::Reference<listener>& rListener)
{
auto iter = find(rKey);
if (iter == m_aMap.end())
{
auto pLC = new OInterfaceContainerHelper4<listener>();
m_aMap.emplace_back(rKey, pLC);
- return pLC->addInterface(rListener);
+ return pLC->addInterface(rGuard, rListener);
}
else
- return (*iter).second->addInterface(rListener);
+ return (*iter).second->addInterface(rGuard, rListener);
}
/** Removes an element from the container with the specified key.
It uses interface equality to remove the interface.
@@ -112,14 +113,14 @@ public:
@return
the new count of elements in the container
*/
- inline sal_Int32 removeInterface(const key& rKey,
+ inline sal_Int32 removeInterface(::std::unique_lock<::std::mutex>& rGuard, const key& rKey,
const css::uno::Reference<listener>& rListener)
{
// search container with id nUik
auto iter = find(rKey);
// container found?
if (iter != m_aMap.end())
- return (*iter).second->removeInterface(rListener);
+ return (*iter).second->removeInterface(rGuard, rListener);
// no container with this id. Always return 0
return 0;
}
@@ -139,7 +140,7 @@ public:
rGuard.unlock();
for (auto& rPair : tempMap)
{
- OInterfaceIteratorHelper4<listener> aIt(*rPair.second);
+ OInterfaceIteratorHelper4<listener> aIt(rGuard, *rPair.second);
while (aIt.hasMoreElements())
{
try
diff --git a/include/vcl/weldutils.hxx b/include/vcl/weldutils.hxx
index a8c2e1eac11d..07fc5eb2d684 100644
--- a/include/vcl/weldutils.hxx
+++ b/include/vcl/weldutils.hxx
@@ -89,84 +89,84 @@ public:
addWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aWindowListeners.addInterface(rListener);
+ m_aWindowListeners.addInterface(g, rListener);
}
void SAL_CALL
removeWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aWindowListeners.removeInterface(rListener);
+ m_aWindowListeners.removeInterface(g, rListener);
}
void SAL_CALL
addFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aFocusListeners.addInterface(rListener);
+ m_aFocusListeners.addInterface(g, rListener);
}
void SAL_CALL
removeFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aFocusListeners.removeInterface(rListener);
+ m_aFocusListeners.removeInterface(g, rListener);
}
void SAL_CALL
addKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aKeyListeners.addInterface(rListener);
+ m_aKeyListeners.addInterface(g, rListener);
}
void SAL_CALL
removeKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aKeyListeners.removeInterface(rListener);
+ m_aKeyListeners.removeInterface(g, rListener);
}
void SAL_CALL
addMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aMouseListeners.addInterface(rListener);
+ m_aMouseListeners.addInterface(g, rListener);
}
void SAL_CALL
removeMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aMouseListeners.removeInterface(rListener);
+ m_aMouseListeners.removeInterface(g, rListener);
}
void SAL_CALL addMouseMotionListener(
const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aMotionListeners.addInterface(rListener);
+ m_aMotionListeners.addInterface(g, rListener);
}
void SAL_CALL removeMouseMotionListener(
const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aMotionListeners.removeInterface(rListener);
+ m_aMotionListeners.removeInterface(g, rListener);
}
void SAL_CALL
addPaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aPaintListeners.addInterface(rListener);
+ m_aPaintListeners.addInterface(g, rListener);
}
void SAL_CALL
removePaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
{
std::unique_lock g(m_aMutex);
- m_aPaintListeners.removeInterface(rListener);
+ m_aPaintListeners.removeInterface(g, rListener);
}
};
diff --git a/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx b/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
index 8a4a8d437440..043aa479fdf1 100644
--- a/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
+++ b/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
@@ -40,14 +40,14 @@ ScDrawModelBroadcaster::~ScDrawModelBroadcaster()
void SAL_CALL ScDrawModelBroadcaster::addEventListener( const uno::Reference< document::XEventListener >& xListener )
{
- std::scoped_lock aGuard(maListenerMutex);
- maEventListeners.addInterface( xListener );
+ std::unique_lock aGuard(maListenerMutex);
+ maEventListeners.addInterface( aGuard, xListener );
}
void SAL_CALL ScDrawModelBroadcaster::removeEventListener( const uno::Reference< document::XEventListener >& xListener )
{
- std::scoped_lock aGuard(maListenerMutex);
- maEventListeners.removeInterface( xListener );
+ std::unique_lock aGuard(maListenerMutex);
+ maEventListeners.removeInterface( aGuard, xListener );
}
void SAL_CALL ScDrawModelBroadcaster::addShapeEventListener(
@@ -87,20 +87,12 @@ void ScDrawModelBroadcaster::Notify( SfxBroadcaster&,
return;
std::unique_lock aGuard(maListenerMutex);
- ::comphelper::OInterfaceIteratorHelper4 aIter( maEventListeners );
- aGuard.unlock();
- while( aIter.hasMoreElements() )
- {
- const uno::Reference < document::XEventListener >& xListener = aIter.next();
- try
- {
- xListener->notifyEvent( aEvent );
- }
- catch( const uno::RuntimeException& )
+ maEventListeners.forEach(aGuard,
+ [&aEvent](const css::uno::Reference<document::XEventListener>& xListener)
{
- TOOLS_WARN_EXCEPTION("sc.ui", "Runtime exception caught while notifying shape");
+ xListener->notifyEvent(aEvent);
}
- }
+ );
// right now, we're only handling the specific event necessary to fix this performance problem
if (pSdrHint->GetKind() == SdrHintKind::ObjectChange)
diff --git a/scripting/source/stringresource/stringresource.cxx b/scripting/source/stringresource/stringresource.cxx
index 3b3c356fa784..c6cdf9ba9225 100644
--- a/scripting/source/stringresource/stringresource.cxx
+++ b/scripting/source/stringresource/stringresource.cxx
@@ -103,7 +103,7 @@ void StringResourceImpl::addModifyListener( const Reference< XModifyListener >&
throw RuntimeException();
std::unique_lock aGuard( m_aMutex );
- m_aListenerContainer.addInterface( aListener );
+ m_aListenerContainer.addInterface( aGuard, aListener );
}
void StringResourceImpl::removeModifyListener( const Reference< XModifyListener >& aListener )
@@ -112,7 +112,7 @@ void StringResourceImpl::removeModifyListener( const Reference< XModifyListener
throw RuntimeException();
std::unique_lock aGuard( m_aMutex );
- m_aListenerContainer.removeInterface( aListener );
+ m_aListenerContainer.removeInterface( aGuard, aListener );
}
@@ -266,7 +266,7 @@ sal_Bool StringResourceImpl::isReadOnly()
return m_bReadOnly;
}
-void StringResourceImpl::implSetCurrentLocale( const Locale& locale,
+void StringResourceImpl::implSetCurrentLocale( std::unique_lock<std::mutex>& rGuard, const Locale& locale,
bool FindClosestMatch, bool bUseDefaultIfNoMatch )
{
LocaleItem* pLocaleItem = nullptr;
@@ -284,14 +284,14 @@ void StringResourceImpl::implSetCurrentLocale( const Locale& locale,
m_pCurrentLocaleItem = pLocaleItem;
// Only notify without modifying
- implNotifyListeners();
+ implNotifyListeners(rGuard);
}
}
void StringResourceImpl::setCurrentLocale( const Locale& locale, sal_Bool FindClosestMatch )
{
std::unique_lock aGuard( m_aMutex );
- implSetCurrentLocale( locale, FindClosestMatch, false/*bUseDefaultIfNoMatch*/ );
+ implSetCurrentLocale( aGuard, locale, FindClosestMatch, false/*bUseDefaultIfNoMatch*/ );
}
void StringResourceImpl::setDefaultLocale( const Locale& locale )
@@ -310,11 +310,11 @@ void StringResourceImpl::setDefaultLocale( const Locale& locale )
m_pDefaultLocaleItem = pLocaleItem;
m_bDefaultModified = true;
- implModified();
+ implModified(aGuard);
}
}
-void StringResourceImpl::implSetString( const OUString& ResourceID,
+void StringResourceImpl::implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
const OUString& Str, LocaleItem* pLocaleItem )
{
if( !(pLocaleItem != nullptr && loadLocale( pLocaleItem )) )
@@ -332,14 +332,14 @@ void StringResourceImpl::implSetString( const OUString& ResourceID,
}
rHashMap[ ResourceID ] = Str;
pLocaleItem->m_bModified = true;
- implModified();
+ implModified(rGuard);
}
void StringResourceImpl::setString( const OUString& ResourceID, const OUString& Str )
{
std::unique_lock aGuard( m_aMutex );
implCheckReadOnly( "StringResourceImpl::setString(): Read only" );
- implSetString( ResourceID, Str, m_pCurrentLocaleItem );
+ implSetString( aGuard, ResourceID, Str, m_pCurrentLocaleItem );
}
void StringResourceImpl::setStringForLocale
@@ -348,10 +348,10 @@ void StringResourceImpl::setStringForLocale
std::unique_lock aGuard( m_aMutex );
implCheckReadOnly( "StringResourceImpl::setStringForLocale(): Read only" );
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
- implSetString( ResourceID, Str, pLocaleItem );
+ implSetString( aGuard, ResourceID, Str, pLocaleItem );
}
-void StringResourceImpl::implRemoveId( const OUString& ResourceID, LocaleItem* pLocaleItem )
+void StringResourceImpl::implRemoveId( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem )
{
if( pLocaleItem != nullptr && loadLocale( pLocaleItem ) )
{
@@ -363,7 +363,7 @@ void StringResourceImpl::implRemoveId( const OUString& ResourceID, LocaleItem* p
}
rHashMap.erase( it );
pLocaleItem->m_bModified = true;
- implModified();
+ implModified(rGuard);
}
}
@@ -371,7 +371,7 @@ void StringResourceImpl::removeId( const OUString& ResourceID )
{
std::unique_lock aGuard( m_aMutex );
implCheckReadOnly( "StringResourceImpl::removeId(): Read only" );
- implRemoveId( ResourceID, m_pCurrentLocaleItem );
+ implRemoveId( aGuard, ResourceID, m_pCurrentLocaleItem );
}
void StringResourceImpl::removeIdForLocale( const OUString& ResourceID, const Locale& locale )
@@ -379,7 +379,7 @@ void StringResourceImpl::removeIdForLocale( const OUString& ResourceID, const Lo
std::unique_lock aGuard( m_aMutex );
implCheckReadOnly( "StringResourceImpl::removeIdForLocale(): Read only" );
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
- implRemoveId( ResourceID, pLocaleItem );
+ implRemoveId( aGuard, ResourceID, pLocaleItem );
}
void StringResourceImpl::newLocale( const Locale& locale )
@@ -438,7 +438,7 @@ void StringResourceImpl::newLocale( const Locale& locale )
m_bDefaultModified = true;
}
- implModified();
+ implModified(aGuard);
}
void StringResourceImpl::removeLocale( const Locale& locale )
@@ -499,7 +499,7 @@ void StringResourceImpl::removeLocale( const Locale& locale )
m_aLocaleItemVector.erase( it );
- implModified();
+ implModified(aGuard);
}
void StringResourceImpl::implScanIdForNumber( const OUString& ResourceID )
@@ -590,29 +590,22 @@ LocaleItem* StringResourceImpl::getClosestMatchItemForLocale( const Locale& loca
return pRetItem;
}
-void StringResourceImpl::implModified()
+void StringResourceImpl::implModified(std::unique_lock<std::mutex>& rGuard)
{
m_bModified = true;
- implNotifyListeners();
+ implNotifyListeners(rGuard);
}
-void StringResourceImpl::implNotifyListeners()
+void StringResourceImpl::implNotifyListeners(std::unique_lock<std::mutex>& rGuard)
{
EventObject aEvent;
aEvent.Source = static_cast< XInterface* >( static_cast<OWeakObject*>(this) );
-
- ::comphelper::OInterfaceIteratorHelper4 it( m_aListenerContainer );
- while( it.hasMoreElements() )
- {
- try
+ m_aListenerContainer.forEach(rGuard,
+ [&aEvent](const css::uno::Reference<XModifyListener>& xListener)
{
- it.next()->modified( aEvent );
+ xListener->modified(aEvent);
}
- catch(RuntimeException&)
- {
- it.remove();
- }
- }
+ );
}
@@ -671,7 +664,7 @@ Sequence< OUString > StringResourcePersistenceImpl::getSupportedServiceNames( )
constexpr OUStringLiteral aNameBaseDefaultStr = u"strings";
void StringResourcePersistenceImpl::implInitializeCommonParameters
- ( const Sequence< Any >& aArguments )
+ ( std::unique_lock<std::mutex>& rGuard, const Sequence< Any >& aArguments )
{
bool bReadOnlyOk = (aArguments[1] >>= m_bReadOnly);
if( !bReadOnlyOk )
@@ -702,7 +695,7 @@ void StringResourcePersistenceImpl::implInitializeCommonParameters
implScanLocales();
- implSetCurrentLocale( aCurrentLocale, true/*FindClosestMatch*/, true/*bUseDefaultIfNoMatch*/ );
+ implSetCurrentLocale( rGuard, aCurrentLocale, true/*FindClosestMatch*/, true/*bUseDefaultIfNoMatch*/ );
}
@@ -2078,7 +2071,7 @@ void StringResourceWithStorageImpl::initialize( const Sequence< Any >& aArgument
throw IllegalArgumentException( "StringResourceWithStorageImpl::initialize: invalid storage", Reference< XInterface >(), 0 );
}
- implInitializeCommonParameters( aArguments );
+ implInitializeCommonParameters( aGuard, aArguments );
}
@@ -2368,7 +2361,7 @@ void StringResourceWithLocationImpl::initialize( const Sequence< Any >& aArgumen
throw IllegalArgumentException( "StringResourceWithStorageImpl::initialize: invalid type", Reference< XInterface >(), 5 );
}
- implInitializeCommonParameters( aArguments );
+ implInitializeCommonParameters( aGuard, aArguments );
}
diff --git a/scripting/source/stringresource/stringresource.hxx b/scripting/source/stringresource/stringresource.hxx
index 1cce2c93782c..a2494cda8a6b 100644
--- a/scripting/source/stringresource/stringresource.hxx
+++ b/scripting/source/stringresource/stringresource.hxx
@@ -117,21 +117,21 @@ protected:
LocaleItem* getClosestMatchItemForLocale( const css::lang::Locale& locale );
/// @throws css::lang::IllegalArgumentException
/// @throws css::uno::RuntimeException
- void implSetCurrentLocale( const css::lang::Locale& locale,
+ void implSetCurrentLocale( std::unique_lock<std::mutex>& rGuard, const css::lang::Locale& locale,
bool FindClosestMatch, bool bUseDefaultIfNoMatch );
- void implModified();
- void implNotifyListeners();
+ void implModified(std::unique_lock<std::mutex>&);
+ void implNotifyListeners(std::unique_lock<std::mutex>&);
//=== Impl methods for ...ForLocale methods ===
/// @throws css::resource::MissingResourceException
OUString implResolveString( const OUString& ResourceID, LocaleItem* pLocaleItem );
bool implHasEntryForId( const OUString& ResourceID, LocaleItem* pLocaleItem );
css::uno::Sequence< OUString > implGetResourceIDs( LocaleItem* pLocaleItem );
- void implSetString( const OUString& ResourceID,
+ void implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
const OUString& Str, LocaleItem* pLocaleItem );
/// @throws css::resource::MissingResourceException
- void implRemoveId( const OUString& ResourceID, LocaleItem* pLocaleItem );
+ void implRemoveId( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem );
// Method to load a locale if necessary, returns true if loading was
// successful. Default implementation in base class just returns true.
@@ -196,7 +196,7 @@ protected:
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
- void implInitializeCommonParameters( const css::uno::Sequence< css::uno::Any >& aArguments );
+ void implInitializeCommonParameters( std::unique_lock<std::mutex>& rGuard, const css::uno::Sequence< css::uno::Any >& aArguments );
// Scan locale properties files
virtual void implScanLocales();
diff --git a/sd/source/ui/slideshow/slideshowviewimpl.cxx b/sd/source/ui/slideshow/slideshowviewimpl.cxx
index 29eca42ea45f..6d2b1613d029 100644
--- a/sd/source/ui/slideshow/slideshowviewimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowviewimpl.cxx
@@ -50,9 +50,9 @@ using namespace ::com::sun::star;
namespace sd
{
-void SlideShowViewMouseListeners::notify( const WrappedMouseEvent& rEvent )
+void SlideShowViewMouseListeners::notify( std::unique_lock<std::mutex>& rGuard, const WrappedMouseEvent& rEvent )
{
- forEach(
+ forEach(rGuard,
[&rEvent] (const Reference<css::awt::XMouseListener>& rListener)
{
switch( rEvent.meType )
@@ -77,9 +77,9 @@ void SlideShowViewMouseListeners::notify( const WrappedMouseEvent& rEvent )
}
-void SlideShowViewMouseMotionListeners::notify( const WrappedMouseMotionEvent& rEvent )
+void SlideShowViewMouseMotionListeners::notify( std::unique_lock<std::mutex>& rGuard,const WrappedMouseMotionEvent& rEvent )
{
- forEach(
+ forEach(rGuard,
[&rEvent] (const Reference< awt::XMouseMotionListener >& rListener)
{
switch( rEvent.meType )
@@ -188,17 +188,17 @@ void SlideShowView::disposingImpl(std::unique_lock<std::mutex>& rGuard)
}
rGuard.lock();
}
- if (maPaintListeners.getLength())
+ if (maPaintListeners.getLength(rGuard))
{
maPaintListeners.disposeAndClear( rGuard, evt );
rGuard.lock();
}
- if (maMouseListeners.getLength())
+ if (maMouseListeners.getLength(rGuard))
{
maMouseListeners.disposeAndClear( rGuard, evt );
rGuard.lock();
}
- if (maMouseMotionListeners.getLength())
+ if (maMouseMotionListeners.getLength(rGuard))
{
maMouseMotionListeners.disposeAndClear( rGuard, evt );
rGuard.lock();
@@ -223,7 +223,7 @@ void SlideShowView::paint( const awt::PaintEvent& e )
// with view
awt::PaintEvent aEvent( e );
aEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maPaintListeners.notifyEach( &css::awt::XPaintListener::windowPaint, aEvent );
+ maPaintListeners.notifyEach( aGuard, &css::awt::XPaintListener::windowPaint, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
}
@@ -351,7 +351,7 @@ void SAL_CALL SlideShowView::addPaintListener( const Reference< awt::XPaintListe
std::unique_lock aGuard( m_aMutex );
if (!m_bDisposed)
- maPaintListeners.addInterface( xListener );
+ maPaintListeners.addInterface( aGuard, xListener );
}
void SAL_CALL SlideShowView::removePaintListener( const Reference< awt::XPaintListener >& xListener )
@@ -359,7 +359,7 @@ void SAL_CALL SlideShowView::removePaintListener( const Reference< awt::XPaintLi
std::unique_lock aGuard( m_aMutex );
if (!m_bDisposed)
- maPaintListeners.removeInterface( xListener );
+ maPaintListeners.removeInterface( aGuard, xListener );
}
void SAL_CALL SlideShowView::addMouseListener( const Reference< awt::XMouseListener >& xListener )
@@ -367,7 +367,7 @@ void SAL_CALL SlideShowView::addMouseListener( const Reference< awt::XMouseListe
std::unique_lock aGuard( m_aMutex );
if (!m_bDisposed)
- maMouseListeners.addInterface( xListener );
+ maMouseListeners.addInterface( aGuard, xListener );
}
void SAL_CALL SlideShowView::removeMouseListener( const Reference< awt::XMouseListener >& xListener )
@@ -375,7 +375,7 @@ void SAL_CALL SlideShowView::removeMouseListener( const Reference< awt::XMouseLi
std::unique_lock aGuard( m_aMutex );
if (!m_bDisposed)
- maMouseListeners.removeInterface( xListener );
+ maMouseListeners.removeInterface( aGuard, xListener );
}
void SAL_CALL SlideShowView::addMouseMotionListener( const Reference< awt::XMouseMotionListener >& xListener )
@@ -393,7 +393,7 @@ void SAL_CALL SlideShowView::addMouseMotionListener( const Reference< awt::XMous
mxWindow->addMouseMotionListener( this );
}
- maMouseMotionListeners.addInterface( xListener );
+ maMouseMotionListeners.addInterface( aGuard, xListener );
}
void SAL_CALL SlideShowView::removeMouseMotionListener( const Reference< awt::XMouseMotionListener >& xListener )
@@ -401,7 +401,7 @@ void SAL_CALL SlideShowView::removeMouseMotionListener( const Reference< awt::XM
std::unique_lock aGuard( m_aMutex );
if (!m_bDisposed)
- maMouseMotionListeners.removeInterface( xListener );
+ maMouseMotionListeners.removeInterface( aGuard, xListener );
// TODO(P1): Might be nice to deregister for mouse motion
// events, when the last listener is gone.
@@ -523,7 +523,7 @@ void SAL_CALL SlideShowView::mousePressed( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseListeners.notify( aEvent );
+ maMouseListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
}
@@ -548,7 +548,7 @@ void SAL_CALL SlideShowView::mouseReleased( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseListeners.notify( aEvent );
+ maMouseListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
}
@@ -566,7 +566,7 @@ void SAL_CALL SlideShowView::mouseEntered( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseListeners.notify( aEvent );
+ maMouseListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
@@ -583,7 +583,7 @@ void SAL_CALL SlideShowView::mouseExited( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseListeners.notify( aEvent );
+ maMouseListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
@@ -601,7 +601,7 @@ void SAL_CALL SlideShowView::mouseDragged( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseMotionListeners.notify( aEvent );
+ maMouseMotionListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
@@ -618,7 +618,7 @@ void SAL_CALL SlideShowView::mouseMoved( const awt::MouseEvent& e )
aEvent.maEvent = e;
aEvent.maEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
- maMouseMotionListeners.notify( aEvent );
+ maMouseMotionListeners.notify( aGuard, aEvent );
updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
}
diff --git a/sd/source/ui/slideshow/slideshowviewimpl.hxx b/sd/source/ui/slideshow/slideshowviewimpl.hxx
index b88fd2cdeff3..3a5018be41b7 100644
--- a/sd/source/ui/slideshow/slideshowviewimpl.hxx
+++ b/sd/source/ui/slideshow/slideshowviewimpl.hxx
@@ -76,7 +76,7 @@ typedef ::comphelper::OInterfaceContainerHelper4< css::awt::XMouseListener > Sli
class SlideShowViewMouseListeners : public SlideShowViewMouseListeners_Base
{
public:
- void notify(const WrappedMouseEvent& rEvent);
+ void notify(std::unique_lock<std::mutex>& rGuard, const WrappedMouseEvent& rEvent);
};
@@ -86,7 +86,7 @@ typedef ::comphelper::OInterfaceContainerHelper4< css::awt::XMouseMotionListener
class SlideShowViewMouseMotionListeners : public SlideShowViewMouseMotionListeners_Base
{
public:
- void notify( const WrappedMouseMotionEvent& rEvent );
+ void notify( std::unique_lock<std::mutex>& rGuard, const WrappedMouseMotionEvent& rEvent );
};
// SlideShowView
diff --git a/sfx2/inc/unoctitm.hxx b/sfx2/inc/unoctitm.hxx
index 1a53091b2b74..a021c5379840 100644
--- a/sfx2/inc/unoctitm.hxx
+++ b/sfx2/inc/unoctitm.hxx
@@ -63,7 +63,7 @@ public:
// Something else
void ReleaseAll();
void sendStatusChanged(const OUString& rURL, const css::frame::FeatureStateEvent& rEvent);
- std::vector<OUString> getContainedTypes() { return maListeners.getContainedTypes(); };
+ std::vector<OUString> getContainedTypes() { std::unique_lock g(maMutex); return maListeners.getContainedTypes(g); };
};
class SfxSlotServer;
diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx
index 5ae4e87f77e4..87d04d3524a8 100644
--- a/sfx2/source/control/unoctitm.cxx
+++ b/sfx2/source/control/unoctitm.cxx
@@ -134,19 +134,12 @@ void SfxStatusDispatcher::sendStatusChanged(const OUString& rURL, const css::fra
::comphelper::OInterfaceContainerHelper4<css::frame::XStatusListener>* pContnr = maListeners.getContainer(rURL);
if (!pContnr)
return;
- ::comphelper::OInterfaceIteratorHelper4 aIt(*pContnr);
- aGuard.unlock();
- while (aIt.hasMoreElements())
- {
- try
- {
- aIt.next()->statusChanged(rEvent);
- }
- catch (const css::uno::RuntimeException&)
+ pContnr->forEach(aGuard,
+ [&rEvent](const css::uno::Reference<css::frame::XStatusListener>& xListener)
{
- aIt.remove();
+ xListener->statusChanged(rEvent);
}
- }
+ );
}
void SAL_CALL SfxStatusDispatcher::dispatch( const css::util::URL&, const css::uno::Sequence< css::beans::PropertyValue >& )
@@ -168,7 +161,7 @@ void SAL_CALL SfxStatusDispatcher::addStatusListener(const css::uno::Reference<
{
{
std::unique_lock aGuard(maMutex);
- maListeners.addInterface( aURL.Complete, aListener );
+ maListeners.addInterface( aGuard, aURL.Complete, aListener );
}
if ( aURL.Complete == ".uno:LifeTime" )
{
@@ -184,7 +177,7 @@ void SAL_CALL SfxStatusDispatcher::addStatusListener(const css::uno::Reference<
void SAL_CALL SfxStatusDispatcher::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener > & aListener, const css::util::URL& aURL )
{
std::unique_lock aGuard(maMutex);
- maListeners.removeInterface( aURL.Complete, aListener );
+ maListeners.removeInterface( aGuard, aURL.Complete, aListener );
}
@@ -300,7 +293,7 @@ void SAL_CALL SfxOfficeDispatch::addStatusListener(const css::uno::Reference< cs
{
{
std::unique_lock aGuard(maMutex);
- maListeners.addInterface( aURL.Complete, aListener );
+ maListeners.addInterface( aGuard, aURL.Complete, aListener );
}
if ( pImpl )
{
diff --git a/sfx2/source/doc/printhelper.cxx b/sfx2/source/doc/printhelper.cxx
index 5cbd8e258c72..0ccdb1b1f2b0 100644
--- a/sfx2/source/doc/printhelper.cxx
+++ b/sfx2/source/doc/printhelper.cxx
@@ -782,13 +782,13 @@ void IMPL_PrintListener_DataContainer::Notify( SfxBroadcaster& rBC, const SfxHin
}
std::unique_lock aGuard(m_aMutex);
- if (!m_aJobListeners.getLength())
+ if (!m_aJobListeners.getLength(aGuard))
return;
view::PrintJobEvent aEvent;
aEvent.Source = m_xPrintJob;
aEvent.State = pPrintHint->GetWhich();
- comphelper::OInterfaceIteratorHelper4 pIterator(m_aJobListeners);
+ comphelper::OInterfaceIteratorHelper4 pIterator(aGuard, m_aJobListeners);
aGuard.unlock();
while (pIterator.hasMoreElements())
pIterator.next()->printJobEvent( aEvent );
@@ -797,13 +797,13 @@ void IMPL_PrintListener_DataContainer::Notify( SfxBroadcaster& rBC, const SfxHin
void SAL_CALL SfxPrintHelper::addPrintJobListener( const css::uno::Reference< css::view::XPrintJobListener >& xListener )
{
std::unique_lock aGuard(m_pData->m_aMutex);
- m_pData->m_aJobListeners.addInterface( xListener );
+ m_pData->m_aJobListeners.addInterface( aGuard, xListener );
}
void SAL_CALL SfxPrintHelper::removePrintJobListener( const css::uno::Reference< css::view::XPrintJobListener >& xListener )
{
std::unique_lock aGuard(m_pData->m_aMutex);
- m_pData->m_aJobListeners.removeInterface( xListener );
+ m_pData->m_aJobListeners.removeInterface( aGuard, xListener );
}
diff --git a/sfx2/source/notify/globalevents.cxx b/sfx2/source/notify/globalevents.cxx
index 0208a5f412a5..817e8a38448b 100644
--- a/sfx2/source/notify/globalevents.cxx
+++ b/sfx2/source/notify/globalevents.cxx
@@ -168,35 +168,35 @@ uno::Reference< container::XNameReplace > SAL_CALL SfxGlobalEvents_Impl::getEven
void SAL_CALL SfxGlobalEvents_Impl::addEventListener(const uno::Reference< document::XEventListener >& xListener)
{
- std::scoped_lock g(m_aLock);
+ std::unique_lock g(m_aLock);
if (m_disposed)
throw css::lang::DisposedException();
- m_aLegacyListeners.addInterface(xListener);
+ m_aLegacyListeners.addInterface(g, xListener);
}
void SAL_CALL SfxGlobalEvents_Impl::removeEventListener(const uno::Reference< document::XEventListener >& xListener)
{
- std::scoped_lock g(m_aLock);
+ std::unique_lock g(m_aLock);
// The below removeInterface will silently do nothing when m_disposed
- m_aLegacyListeners.removeInterface(xListener);
+ m_aLegacyListeners.removeInterface(g, xListener);
}
void SAL_CALL SfxGlobalEvents_Impl::addDocumentEventListener( const uno::Reference< document::XDocumentEventListener >& Listener )
{
- std::scoped_lock g(m_aLock);
+ std::unique_lock g(m_aLock);
if (m_disposed)
throw css::lang::DisposedException();
- m_aDocumentListeners.addInterface( Listener );
+ m_aDocumentListeners.addInterface( g, Listener );
}
void SAL_CALL SfxGlobalEvents_Impl::removeDocumentEventListener( const uno::Reference< document::XDocumentEventListener >& Listener )
{
- std::scoped_lock g(m_aLock);
+ std::unique_lock g(m_aLock);
// The below removeInterface will silently do nothing when m_disposed:
- m_aDocumentListeners.removeInterface( Listener );
+ m_aDocumentListeners.removeInterface( g, Listener );
}
@@ -478,43 +478,21 @@ void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const document::D
void SfxGlobalEvents_Impl::implts_notifyListener(const document::DocumentEvent& aEvent)
{
- std::optional<comphelper::OInterfaceIteratorHelper4<document::XEventListener>> aIt1;
- std::optional<comphelper::OInterfaceIteratorHelper4<document::XDocumentEventListener>> aIt2;
-
- {
- std::scoped_lock g(m_aLock);
- aIt1.emplace(m_aLegacyListeners);
- aIt2.emplace(m_aDocumentListeners);
- }
+ std::unique_lock g(m_aLock);
document::EventObject aLegacyEvent(aEvent.Source, aEvent.EventName);
- while (aIt1->hasMoreElements())
- {
- auto xListener = aIt1->next();
- try
+ m_aLegacyListeners.forEach(g,
+ [&aLegacyEvent](const css::uno::Reference<document::XEventListener>& xListener)
{
xListener->notifyEvent(aLegacyEvent);
}
- catch (css::lang::DisposedException const& exc)
- {
- if (exc.Context == xListener)
- aIt1->remove();
- }
- }
-
- while (aIt2->hasMoreElements())
- {
- auto xListener = aIt2->next();
- try
+ );
+ m_aDocumentListeners.forEach(g,
+ [&aEvent](const css::uno::Reference<document::XDocumentEventListener>& xListener)
{
xListener->documentEventOccured(aEvent);
}
- catch (css::lang::DisposedException const& exc)
- {
- if (exc.Context == xListener)
- aIt2->remove();
- }
- }
+ );
}
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index 8fdf33487a56..298f7a722ed2 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -1841,12 +1841,14 @@ SfxBaseController* SfxViewShell::GetBaseController_Impl() const
void SfxViewShell::AddContextMenuInterceptor_Impl( const uno::Reference< ui::XContextMenuInterceptor >& xInterceptor )
{
- pImpl->aInterceptorContainer.addInterface( xInterceptor );
+ std::unique_lock g(pImpl->aMutex);
+ pImpl->aInterceptorContainer.addInterface( g, xInterceptor );
}
void SfxViewShell::RemoveContextMenuInterceptor_Impl( const uno::Reference< ui::XContextMenuInterceptor >& xInterceptor )
{
- pImpl->aInterceptorContainer.removeInterface( xInterceptor );
+ std::unique_lock g(pImpl->aMutex);
+ pImpl->aInterceptorContainer.removeInterface( g, xInterceptor );
}
bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt::XPopupMenu>& rIn,
@@ -1866,16 +1868,17 @@ bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt
// call interceptors
std::unique_lock g(pImpl->aMutex);
- ::comphelper::OInterfaceIteratorHelper4 aIt( pImpl->aInterceptorContainer );
+ std::vector<uno::Reference< ui::XContextMenuInterceptor>> aInterceptors =
+ pImpl->aInterceptorContainer.getElements(g);
g.unlock();
- while( aIt.hasMoreElements() )
+ for (const auto & rListener : aInterceptors )
{
try
{
ui::ContextMenuInterceptorAction eAction;
{
SolarMutexReleaser rel;
- eAction = aIt.next()->notifyContextMenuExecute( aEvent );
+ eAction = rListener->notifyContextMenuExecute( aEvent );
}
switch ( eAction )
{
@@ -1900,7 +1903,9 @@ bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt
}
catch (...)
{
- aIt.remove();
+ g.lock();
+ pImpl->aInterceptorContainer.removeInterface(g, rListener);
+ g.unlock();
}
break;
@@ -1931,16 +1936,17 @@ bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt
// call interceptors
std::unique_lock g(pImpl->aMutex);
- ::comphelper::OInterfaceIteratorHelper4 aIt( pImpl->aInterceptorContainer );
+ std::vector<uno::Reference< ui::XContextMenuInterceptor>> aInterceptors =
+ pImpl->aInterceptorContainer.getElements(g);
g.unlock();
- while( aIt.hasMoreElements() )
+ for (const auto & rListener : aInterceptors )
{
try
{
css::ui::ContextMenuInterceptorAction eAction;
{
SolarMutexReleaser rel;
- eAction = aIt.next()->notifyContextMenuExecute( aEvent );
+ eAction = rListener->notifyContextMenuExecute( aEvent );
}
switch ( eAction )
{
@@ -1965,7 +1971,9 @@ bool SfxViewShell::TryContextMenuInterception(const css::uno::Reference<css::awt
}
catch (...)
{
- aIt.remove();
+ g.lock();
+ pImpl->aInterceptorContainer.removeInterface(g, rListener);
+ g.unlock();
}
break;
diff --git a/svl/source/fsstor/oinputstreamcontainer.cxx b/svl/source/fsstor/oinputstreamcontainer.cxx
index 1339096dce9f..a2dc0456a84c 100644
--- a/svl/source/fsstor/oinputstreamcontainer.cxx
+++ b/svl/source/fsstor/oinputstreamcontainer.cxx
@@ -239,22 +239,22 @@ void SAL_CALL OFSInputStreamContainer::dispose( )
void SAL_CALL OFSInputStreamContainer::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if ( m_bDisposed )
throw lang::DisposedException();
- m_aListenersContainer.addInterface( xListener );
+ m_aListenersContainer.addInterface( aGuard, xListener );
}
void SAL_CALL OFSInputStreamContainer::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if ( m_bDisposed )
throw lang::DisposedException();
- m_aListenersContainer.removeInterface( xListener );
+ m_aListenersContainer.removeInterface( aGuard, xListener );
}
diff --git a/svl/source/fsstor/ostreamcontainer.cxx b/svl/source/fsstor/ostreamcontainer.cxx
index bfa6962ee9c4..d8ef930f7e98 100644
--- a/svl/source/fsstor/ostreamcontainer.cxx
+++ b/svl/source/fsstor/ostreamcontainer.cxx
@@ -233,22 +233,22 @@ void SAL_CALL OFSStreamContainer::dispose()
void SAL_CALL OFSStreamContainer::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if ( m_bDisposed )
throw lang::DisposedException();
- m_aListenersContainer.addInterface( xListener );
+ m_aListenersContainer.addInterface( aGuard, xListener );
}
void SAL_CALL OFSStreamContainer::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
- std::scoped_lock aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
if ( m_bDisposed )
throw lang::DisposedException();
- m_aListenersContainer.removeInterface( xListener );
+ m_aListenersContainer.removeInterface( aGuard, xListener );
}
diff --git a/svx/source/table/tabledesign.cxx b/svx/source/table/tabledesign.cxx
index d383898adae1..935cebefe4bd 100644
--- a/svx/source/table/tabledesign.cxx
+++ b/svx/source/table/tabledesign.cxx
@@ -228,9 +228,9 @@ sal_Bool SAL_CALL TableDesignStyle::isUserDefined()
sal_Bool SAL_CALL TableDesignStyle::isInUse()
{
std::unique_lock aGuard( m_aMutex );
- if (maModifyListeners.getLength())
+ if (maModifyListeners.getLength(aGuard))
{
- comphelper::OInterfaceIteratorHelper4 it(maModifyListeners);
+ comphelper::OInterfaceIteratorHelper4 it(aGuard, maModifyListeners);
while ( it.hasMoreElements() )
{
TableDesignUser* pUser = dynamic_cast< TableDesignUser* >( it.next().get() );
@@ -396,7 +396,7 @@ void SAL_CALL TableDesignStyle::addModifyListener( const Reference< XModifyListe
}
else
{
- maModifyListeners.addInterface( xListener );
+ maModifyListeners.addInterface( aGuard, xListener );
}
}
@@ -404,7 +404,7 @@ void SAL_CALL TableDesignStyle::addModifyListener( const Reference< XModifyListe
void SAL_CALL TableDesignStyle::removeModifyListener( const Reference< XModifyListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- maModifyListeners.removeInterface( xListener );
+ maModifyListeners.removeInterface( aGuard, xListener );
}
@@ -412,10 +412,10 @@ void TableDesignStyle::notifyModifyListener()
{
std::unique_lock aGuard( m_aMutex );
- if( maModifyListeners.getLength() )
+ if( maModifyListeners.getLength(aGuard) )
{
EventObject aEvt( static_cast< OWeakObject * >( this ) );
- maModifyListeners.forEach(
+ maModifyListeners.forEach(aGuard,
[&] (Reference<XModifyListener> const& xListener)
{ return xListener->modified(aEvt); });
}
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
index 80cda9bb6555..466a4efca29e 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_translation_unodialog.cxx
@@ -134,7 +134,7 @@ void SAL_CALL ChineseTranslation_UnoDialog::addEventListener( const uno::Referen
if( m_bDisposed || m_bInDispose )
return;
std::unique_lock aGuard(m_aContainerMutex);
- m_aDisposeEventListeners.addInterface( xListener );
+ m_aDisposeEventListeners.addInterface( aGuard, xListener );
}
void SAL_CALL ChineseTranslation_UnoDialog::removeEventListener( const uno::Reference< lang::XEventListener > & xListener )
@@ -143,7 +143,7 @@ void SAL_CALL ChineseTranslation_UnoDialog::removeEventListener( const uno::Refe
if( m_bDisposed || m_bInDispose )
return;
std::unique_lock aGuard(m_aContainerMutex);
- m_aDisposeEventListeners.removeInterface( xListener );
+ m_aDisposeEventListeners.removeInterface( aGuard, xListener );
}
diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx
index 347038a09ba0..b5577df6ecde 100644
--- a/sw/source/core/unocore/unobkm.cxx
+++ b/sw/source/core/unocore/unobkm.cxx
@@ -301,7 +301,7 @@ void SAL_CALL SwXBookmark::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXBookmark::removeEventListener(
@@ -309,7 +309,7 @@ void SAL_CALL SwXBookmark::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
OUString SAL_CALL SwXBookmark::getName()
diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx
index d1bc07765758..b32a0dc35b80 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -160,7 +160,8 @@ static void LaunchModifiedEvent(
const uno::Reference< uno::XInterface > &rxI )
{
lang::EventObject aEvtObj( rxI );
- rICH.notifyEach( &util::XModifyListener::modified, aEvtObj );
+ std::unique_lock aGuard(GetChartMutex());
+ rICH.notifyEach( aGuard, &util::XModifyListener::modified, aEvtObj );
}
/**
@@ -1383,7 +1384,7 @@ void SAL_CALL SwChartDataProvider::addEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEventListeners.addInterface( rxListener );
+ m_aEventListeners.addInterface( aGuard, rxListener );
}
void SAL_CALL SwChartDataProvider::removeEventListener(
@@ -1391,7 +1392,7 @@ void SAL_CALL SwChartDataProvider::removeEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEventListeners.removeInterface( rxListener );
+ m_aEventListeners.removeInterface( aGuard, rxListener );
}
OUString SAL_CALL SwChartDataProvider::getImplementationName( )
@@ -2191,7 +2192,7 @@ void SAL_CALL SwChartDataSequence::addModifyListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aModifyListeners.addInterface( rxListener );
+ m_aModifyListeners.addInterface( aGuard, rxListener );
}
void SAL_CALL SwChartDataSequence::removeModifyListener(
@@ -2199,7 +2200,7 @@ void SAL_CALL SwChartDataSequence::removeModifyListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aModifyListeners.removeInterface( rxListener );
+ m_aModifyListeners.removeInterface( aGuard, rxListener );
}
void SAL_CALL SwChartDataSequence::disposing( const lang::EventObject& rSource )
@@ -2274,7 +2275,7 @@ void SAL_CALL SwChartDataSequence::addEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEvtListeners.addInterface( rxListener );
+ m_aEvtListeners.addInterface( aGuard, rxListener );
}
void SAL_CALL SwChartDataSequence::removeEventListener(
@@ -2282,7 +2283,7 @@ void SAL_CALL SwChartDataSequence::removeEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEvtListeners.removeInterface( rxListener );
+ m_aEvtListeners.removeInterface( aGuard, rxListener );
}
bool SwChartDataSequence::DeleteBox( const SwTableBox &rBox )
@@ -2652,7 +2653,7 @@ void SAL_CALL SwChartLabeledDataSequence::addModifyListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aModifyListeners.addInterface( rxListener );
+ m_aModifyListeners.addInterface( aGuard, rxListener );
}
void SAL_CALL SwChartLabeledDataSequence::removeModifyListener(
@@ -2660,7 +2661,7 @@ void SAL_CALL SwChartLabeledDataSequence::removeModifyListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aModifyListeners.removeInterface( rxListener );
+ m_aModifyListeners.removeInterface( aGuard, rxListener );
}
void SAL_CALL SwChartLabeledDataSequence::dispose( )
@@ -2690,7 +2691,7 @@ void SAL_CALL SwChartLabeledDataSequence::addEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEventListeners.addInterface( rxListener );
+ m_aEventListeners.addInterface( aGuard, rxListener );
}
void SAL_CALL SwChartLabeledDataSequence::removeEventListener(
@@ -2698,7 +2699,7 @@ void SAL_CALL SwChartLabeledDataSequence::removeEventListener(
{
std::unique_lock aGuard( GetChartMutex() );
if (!m_bDisposed && rxListener.is())
- m_aEventListeners.removeInterface( rxListener );
+ m_aEventListeners.removeInterface( aGuard, rxListener );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index 717776dbc6f0..703eb3e1f2a5 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -404,10 +404,9 @@ static sal_uInt16 lcl_GetPropertyMapOfService( SwServiceType nServiceId )
class SwXFieldMaster::Impl
: public SvtListener
{
-private:
- std::mutex m_Mutex; // just for OInterfaceContainerHelper3
-
public:
+ std::mutex m_Mutex; // just for OInterfaceContainerHelper4
+
uno::WeakReference<uno::XInterface> m_wThis;
::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_EventListeners;
@@ -970,15 +969,15 @@ void SAL_CALL SwXFieldMaster::dispose()
void SAL_CALL SwXFieldMaster::addEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.addInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXFieldMaster::removeEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
void SwXFieldMaster::Impl::Notify(const SfxHint& rHint)
@@ -1083,12 +1082,11 @@ struct SwFieldProperties_Impl
class SwXTextField::Impl
: public SvtListener
{
-private:
- std::mutex m_Mutex; // just for OInterfaceContainerHelper3
+public:
+ std::mutex m_Mutex; // just for OInterfaceContainerHelper4
SwFieldType* m_pFieldType;
SwFormatField* m_pFormatField;
-public:
uno::WeakReference<uno::XInterface> m_wThis;
::comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_EventListeners;
@@ -2112,15 +2110,15 @@ void SAL_CALL SwXTextField::dispose()
void SAL_CALL SwXTextField::addEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.addInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXTextField::removeEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
uno::Reference< beans::XPropertySetInfo > SAL_CALL
@@ -2898,22 +2896,23 @@ void SAL_CALL SwXTextFieldTypes::refresh()
}
// call refresh listeners (without SolarMutex locked)
lang::EventObject const event(static_cast< ::cppu::OWeakObject*>(this));
- m_pImpl->m_RefreshListeners.notifyEach(
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_RefreshListeners.notifyEach(aGuard,
& util::XRefreshListener::refreshed, event);
}
void SAL_CALL SwXTextFieldTypes::addRefreshListener(
const uno::Reference<util::XRefreshListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_RefreshListeners.addInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_RefreshListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXTextFieldTypes::removeRefreshListener(
const uno::Reference<util::XRefreshListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_RefreshListeners.removeInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_RefreshListeners.removeInterface(aGuard, xListener);
}
class SwXFieldEnumeration::Impl
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx
index 73f713b438aa..5ba3ecf98f8e 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -2598,15 +2598,15 @@ uno::Any SwXFrame::getPropertyDefault( const OUString& rPropertyName )
void SAL_CALL SwXFrame::addEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.addInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXFrame::removeEventListener(
const uno::Reference<lang::XEventListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ std::unique_lock aGuard(m_pImpl->m_Mutex);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
void SwXFrame::DisposeInternal()
diff --git a/sw/source/core/unocore/unoftn.cxx b/sw/source/core/unocore/unoftn.cxx
index 82c7f2555243..ca012bbb03e5 100644
--- a/sw/source/core/unocore/unoftn.cxx
+++ b/sw/source/core/unocore/unoftn.cxx
@@ -378,7 +378,7 @@ SwXFootnote::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL
@@ -387,7 +387,7 @@ SwXFootnote::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
const SwStartNode *SwXFootnote::GetStartNode() const
diff --git a/sw/source/core/unocore/unoidx.cxx b/sw/source/core/unocore/unoidx.cxx
index e4276a618410..98eb107977be 100644
--- a/sw/source/core/unocore/unoidx.cxx
+++ b/sw/source/core/unocore/unoidx.cxx
@@ -1990,7 +1990,7 @@ SwXDocumentIndexMark::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL
@@ -1999,7 +1999,7 @@ SwXDocumentIndexMark::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
uno::Reference< beans::XPropertySetInfo > SAL_CALL
diff --git a/sw/source/core/unocore/unoparagraph.cxx b/sw/source/core/unocore/unoparagraph.cxx
index 658fa7aac3eb..208ebad07fd7 100644
--- a/sw/source/core/unocore/unoparagraph.cxx
+++ b/sw/source/core/unocore/unoparagraph.cxx
@@ -1234,7 +1234,7 @@ void SAL_CALL SwXParagraph::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXParagraph::removeEventListener(
@@ -1242,7 +1242,7 @@ void SAL_CALL SwXParagraph::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
uno::Reference< container::XEnumeration > SAL_CALL
diff --git a/sw/source/core/unocore/unorefmk.cxx b/sw/source/core/unocore/unorefmk.cxx
index 925f40b370f9..53c12ab255a5 100644
--- a/sw/source/core/unocore/unorefmk.cxx
+++ b/sw/source/core/unocore/unorefmk.cxx
@@ -360,7 +360,7 @@ void SAL_CALL SwXReferenceMark::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXReferenceMark::removeEventListener(
@@ -368,7 +368,7 @@ void SAL_CALL SwXReferenceMark::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
OUString SAL_CALL SwXReferenceMark::getName()
@@ -876,7 +876,7 @@ SwXMeta::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL
@@ -885,7 +885,7 @@ SwXMeta::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
void SAL_CALL
diff --git a/sw/source/core/unocore/unosect.cxx b/sw/source/core/unocore/unosect.cxx
index 2fc5ac582ab7..54cc983c57c8 100644
--- a/sw/source/core/unocore/unosect.cxx
+++ b/sw/source/core/unocore/unosect.cxx
@@ -494,7 +494,7 @@ void SAL_CALL SwXTextSection::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXTextSection::removeEventListener(
@@ -502,7 +502,7 @@ void SAL_CALL SwXTextSection::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
uno::Reference< beans::XPropertySetInfo > SAL_CALL
diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx
index 7853d7ccbe2b..7680b458176d 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -146,12 +146,12 @@ namespace
return event;
}
- void lcl_SendChartEvent(
+ void lcl_SendChartEvent(std::unique_lock<std::mutex>& rGuard,
uno::Reference<uno::XInterface> const& xSource,
::comphelper::OInterfaceContainerHelper4<chart::XChartDataChangeEventListener> & rListeners)
{
- if (rListeners.getLength())
- rListeners.notifyEach(
+ if (rListeners.getLength(rGuard))
+ rListeners.notifyEach(rGuard,
&chart::XChartDataChangeEventListener::chartDataChanged,
createChartEvent(xSource));
}
@@ -2167,7 +2167,7 @@ void SAL_CALL SwXTextTable::addEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.addInterface(xListener);
+ m_pImpl->m_EventListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXTextTable::removeEventListener(
@@ -2175,7 +2175,7 @@ void SAL_CALL SwXTextTable::removeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_EventListeners.removeInterface(xListener);
+ m_pImpl->m_EventListeners.removeInterface(aGuard, xListener);
}
uno::Reference<table::XCell> SwXTextTable::getCellByPosition(sal_Int32 nColumn, sal_Int32 nRow)
@@ -2317,7 +2317,7 @@ void SwXTextTable::setData(const uno::Sequence< uno::Sequence< double > >& rData
xAllRange->setData(rData);
// this is rather inconsistent: setData on XTextTable sends events, but e.g. CellRanges do not
std::unique_lock aGuard2(m_pImpl->m_Mutex);
- lcl_SendChartEvent(*this, m_pImpl->m_ChartListeners);
+ lcl_SendChartEvent(aGuard2, *this, m_pImpl->m_ChartListeners);
}
uno::Sequence<OUString> SwXTextTable::getRowDescriptions()
@@ -2373,7 +2373,7 @@ void SAL_CALL SwXTextTable::addChartDataChangeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_ChartListeners.addInterface(xListener);
+ m_pImpl->m_ChartListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXTextTable::removeChartDataChangeEventListener(
@@ -2381,7 +2381,7 @@ void SAL_CALL SwXTextTable::removeChartDataChangeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_ChartListeners.removeInterface(xListener);
+ m_pImpl->m_ChartListeners.removeInterface(aGuard, xListener);
}
sal_Bool SwXTextTable::isNotANumber(double nNumber)
@@ -2492,7 +2492,7 @@ void SwXTextTable::setPropertyValue(const OUString& rPropertyName, const uno::An
if (m_pImpl->m_bFirstRowAsLabel != bTmp)
{
std::unique_lock aGuard2(m_pImpl->m_Mutex);
- lcl_SendChartEvent(*this, m_pImpl->m_ChartListeners);
+ lcl_SendChartEvent(aGuard2, *this, m_pImpl->m_ChartListeners);
m_pImpl->m_bFirstRowAsLabel = bTmp;
}
}
@@ -2504,7 +2504,7 @@ void SwXTextTable::setPropertyValue(const OUString& rPropertyName, const uno::An
if (m_pImpl->m_bFirstColumnAsLabel != bTmp)
{
std::unique_lock aGuard2(m_pImpl->m_Mutex);
- lcl_SendChartEvent(*this, m_pImpl->m_ChartListeners);
+ lcl_SendChartEvent(aGuard2, *this, m_pImpl->m_ChartListeners);
m_pImpl->m_bFirstColumnAsLabel = bTmp;
}
}
@@ -3086,7 +3086,7 @@ void SwXTextTable::Impl::Notify(const SfxHint& rHint)
else
{
std::unique_lock aGuard(m_Mutex);
- lcl_SendChartEvent(xThis, m_ChartListeners);
+ lcl_SendChartEvent(aGuard, xThis, m_ChartListeners);
}
}
}
@@ -3413,7 +3413,7 @@ SwXCellRange::setPropertyValue(const OUString& rPropertyName, const uno::Any& aV
if (m_pImpl->m_bFirstRowAsLabel != bTmp)
{
std::unique_lock aGuard2(m_pImpl->m_Mutex);
- lcl_SendChartEvent(*this, m_pImpl->m_ChartListeners);
+ lcl_SendChartEvent(aGuard2, *this, m_pImpl->m_ChartListeners);
m_pImpl->m_bFirstRowAsLabel = bTmp;
}
}
@@ -3424,7 +3424,7 @@ SwXCellRange::setPropertyValue(const OUString& rPropertyName, const uno::Any& aV
if (m_pImpl->m_bFirstColumnAsLabel != bTmp)
{
std::unique_lock aGuard2(m_pImpl->m_Mutex);
- lcl_SendChartEvent(*this, m_pImpl->m_ChartListeners);
+ lcl_SendChartEvent(aGuard2, *this, m_pImpl->m_ChartListeners);
m_pImpl->m_bFirstColumnAsLabel = bTmp;
}
}
@@ -3762,7 +3762,7 @@ void SAL_CALL SwXCellRange::addChartDataChangeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_ChartListeners.addInterface(xListener);
+ m_pImpl->m_ChartListeners.addInterface(aGuard, xListener);
}
void SAL_CALL SwXCellRange::removeChartDataChangeEventListener(
@@ -3770,7 +3770,7 @@ void SAL_CALL SwXCellRange::removeChartDataChangeEventListener(
{
// no need to lock here as m_pImpl is const and container threadsafe
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_ChartListeners.removeInterface(xListener);
+ m_pImpl->m_ChartListeners.removeInterface(aGuard, xListener);
}
sal_Bool SwXCellRange::isNotANumber(double /*fNumber*/)
@@ -3828,7 +3828,7 @@ void SwXCellRange::Impl::Notify( const SfxHint& rHint )
if(m_pFrameFormat)
{
std::unique_lock aGuard(m_Mutex);
- lcl_SendChartEvent(xThis, m_ChartListeners);
+ lcl_SendChartEvent(aGuard, xThis, m_ChartListeners);
}
else
{
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index 7c2b71079635..959f7abd7527 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -2144,7 +2144,7 @@ void SwXTextDocument::NotifyRefreshListeners()
// (sometimes) a different shell than GetWrtShell()?
lang::EventObject const ev(static_cast<SwXTextDocumentBaseClass &>(*this));
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_RefreshListeners.notifyEach(
+ m_pImpl->m_RefreshListeners.notifyEach(aGuard,
& util::XRefreshListener::refreshed, ev);
}
@@ -2163,22 +2163,20 @@ void SwXTextDocument::refresh()
void SAL_CALL SwXTextDocument::addRefreshListener(
const Reference<util::XRefreshListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
if (xListener)
{
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_RefreshListeners.addInterface(xListener);
+ m_pImpl->m_RefreshListeners.addInterface(aGuard, xListener);
}
}
void SAL_CALL SwXTextDocument::removeRefreshListener(
const Reference<util::XRefreshListener> & xListener)
{
- // no need to lock here as m_pImpl is const and container threadsafe
if (xListener)
{
std::unique_lock aGuard(m_pImpl->m_Mutex);
- m_pImpl->m_RefreshListeners.removeInterface(xListener);
+ m_pImpl->m_RefreshListeners.removeInterface(aGuard, xListener);
}
}
diff --git a/toolkit/source/controls/grid/gridcolumn.cxx b/toolkit/source/controls/grid/gridcolumn.cxx
index 6d94ecb9a72b..0db9b50a5d75 100644
--- a/toolkit/source/controls/grid/gridcolumn.cxx
+++ b/toolkit/source/controls/grid/gridcolumn.cxx
@@ -81,8 +81,7 @@ namespace toolkit
i_oldValue, i_newValue, m_nIndex
);
- i_Guard.unlock();
- maGridColumnListeners.notifyEach( &XGridColumnListener::columnChanged, aEvent );
+ maGridColumnListeners.notifyEach( i_Guard, &XGridColumnListener::columnChanged, aEvent );
}
@@ -209,14 +208,14 @@ namespace toolkit
void SAL_CALL GridColumn::addGridColumnListener( const Reference< XGridColumnListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- maGridColumnListeners.addInterface( xListener );
+ maGridColumnListeners.addInterface( aGuard, xListener );
}
void SAL_CALL GridColumn::removeGridColumnListener( const Reference< XGridColumnListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- maGridColumnListeners.removeInterface( xListener );
+ maGridColumnListeners.removeInterface( aGuard, xListener );
}
diff --git a/toolkit/source/hatchwindow/documentcloser.cxx b/toolkit/source/hatchwindow/documentcloser.cxx
index 16df8536f5f1..2eceee0d9c4c 100644
--- a/toolkit/source/hatchwindow/documentcloser.cxx
+++ b/toolkit/source/hatchwindow/documentcloser.cxx
@@ -190,14 +190,14 @@ void SAL_CALL ODocumentCloser::addEventListener( const uno::Reference< lang::XEv
if ( m_bDisposed )
throw lang::DisposedException(); // TODO
- m_aListenersContainer.addInterface( xListener );
+ m_aListenersContainer.addInterface( aGuard, xListener );
}
void SAL_CALL ODocumentCloser::removeEventListener( const uno::Reference< lang::XEventListener >& xListener )
{
std::unique_lock aGuard( m_aMutex );
- m_aListenersContainer.removeInterface( xListener );
+ m_aListenersContainer.removeInterface( aGuard, xListener );
}
// XServiceInfo
diff --git a/ucbhelper/source/provider/resultset.cxx b/ucbhelper/source/provider/resultset.cxx
index 162f32cffabf..c3565b1179f0 100644
--- a/ucbhelper/source/provider/resultset.cxx
+++ b/ucbhelper/source/provider/resultset.cxx
@@ -236,7 +236,7 @@ void SAL_CALL ResultSet::dispose()
{
std::unique_lock aGuard( m_pImpl->m_aMutex );
- if ( m_pImpl->m_aDisposeEventListeners.getLength() )
+ if ( m_pImpl->m_aDisposeEventListeners.getLength(aGuard) )
{
lang::EventObject aEvt;
aEvt.Source = static_cast< lang::XComponent * >( this );
@@ -262,7 +262,7 @@ void SAL_CALL ResultSet::addEventListener(
{
std::unique_lock aGuard( m_pImpl->m_aMutex );
- m_pImpl->m_aDisposeEventListeners.addInterface( Listener );
+ m_pImpl->m_aDisposeEventListeners.addInterface( aGuard, Listener );
}
@@ -272,7 +272,7 @@ void SAL_CALL ResultSet::removeEventListener(
{
std::unique_lock aGuard( m_pImpl->m_aMutex );
- m_pImpl->m_aDisposeEventListeners.removeInterface( Listener );
+ m_pImpl->m_aDisposeEventListeners.removeInterface( aGuard, Listener );
}
@@ -1256,7 +1256,7 @@ void SAL_CALL ResultSet::addPropertyChangeListener(
m_pImpl->m_pPropertyChangeListeners.reset(
new PropertyChangeListeners());
- m_pImpl->m_pPropertyChangeListeners->addInterface(
+ m_pImpl->m_pPropertyChangeListeners->addInterface(aGuard,
aPropertyName, xListener );
}
@@ -1274,7 +1274,7 @@ void SAL_CALL ResultSet::removePropertyChangeListener(
throw beans::UnknownPropertyException(aPropertyName);
if ( m_pImpl->m_pPropertyChangeListeners )
- m_pImpl->m_pPropertyChangeListeners->removeInterface(
+ m_pImpl->m_pPropertyChangeListeners->removeInterface(aGuard,
aPropertyName, xListener );
}
@@ -1303,6 +1303,8 @@ void SAL_CALL ResultSet::removeVetoableChangeListener(
void ResultSet::propertyChanged( const beans::PropertyChangeEvent& rEvt ) const
{
+ std::unique_lock aGuard( m_pImpl->m_aMutex );
+
if ( !m_pImpl->m_pPropertyChangeListeners )
return;
@@ -1312,7 +1314,7 @@ void ResultSet::propertyChanged( const beans::PropertyChangeEvent& rEvt ) const
rEvt.PropertyName );
if ( pPropsContainer )
{
- pPropsContainer->notifyEach(&beans::XPropertyChangeListener::propertyChange, rEvt);
+ pPropsContainer->notifyEach(aGuard, &beans::XPropertyChangeListener::propertyChange, rEvt);
}
// Notify listeners interested in all properties.
@@ -1320,7 +1322,7 @@ void ResultSet::propertyChanged( const beans::PropertyChangeEvent& rEvt ) const
= m_pImpl->m_pPropertyChangeListeners->getContainer( OUString() );
if ( pPropsContainer )
{
- comphelper::OInterfaceIteratorHelper4 aIter( *pPropsContainer );
+ comphelper::OInterfaceIteratorHelper4 aIter( aGuard, *pPropsContainer );
while ( aIter.hasMoreElements() )
{
aIter.next()->propertyChange( rEvt );
diff --git a/ucbhelper/source/provider/resultsethelper.cxx b/ucbhelper/source/provider/resultsethelper.cxx
index 25ead4bd8a22..6d750c82dbba 100644
--- a/ucbhelper/source/provider/resultsethelper.cxx
+++ b/ucbhelper/source/provider/resultsethelper.cxx
@@ -90,7 +90,7 @@ void SAL_CALL ResultSetImplHelper::dispose()
{
std::unique_lock aGuard( m_aMutex );
- if ( m_aDisposeEventListeners.getLength() )
+ if ( m_aDisposeEventListeners.getLength(aGuard) )
{
lang::EventObject aEvt;
aEvt.Source = static_cast< lang::XComponent * >( this );
@@ -105,7 +105,7 @@ void SAL_CALL ResultSetImplHelper::addEventListener(
{
std::unique_lock aGuard( m_aMutex );
- m_aDisposeEventListeners.addInterface( Listener );
+ m_aDisposeEventListeners.addInterface( aGuard, Listener );
}
@@ -115,7 +115,7 @@ void SAL_CALL ResultSetImplHelper::removeEventListener(
{
std::unique_lock aGuard( m_aMutex );
- m_aDisposeEventListeners.removeInterface( Listener );
+ m_aDisposeEventListeners.removeInterface( aGuard, Listener );
}