comphelper/source/misc/configuration.cxx | 7 +++++++ include/comphelper/configurationlistener.hxx | 1 + 2 files changed, 8 insertions(+)
New commits: commit c0096b5b8412a8bfd40b84491e6d6eccd6d98504 Author: Michael Meeks <michael.me...@collabora.com> Date: Fri Oct 9 11:26:38 2015 +0100 Hold the SolarMutex while updating properties; thanks to sberg. Change-Id: Id9dc4c7e083da2a8d44c7295a8b605de81bca1ef Reviewed-on: https://gerrit.libreoffice.org/19272 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/comphelper/source/misc/configuration.cxx b/comphelper/source/misc/configuration.cxx index e5bf8b8..ea01cea 100644 --- a/comphelper/source/misc/configuration.cxx +++ b/comphelper/source/misc/configuration.cxx @@ -26,6 +26,7 @@ #include <com/sun/star/uno/Any.hxx> #include <com/sun/star/uno/Reference.hxx> #include <com/sun/star/uno/XComponentContext.hpp> +#include <comphelper/solarmutex.hxx> #include <comphelper/configuration.hxx> #include <comphelper/configurationlistener.hxx> #include <rtl/instance.hxx> @@ -248,6 +249,12 @@ void SAL_CALL comphelper::ConfigurationListener::propertyChange( css::beans::PropertyChangeEvent const &rEvt ) throw (css::uno::RuntimeException, std::exception) { + // Code is commonly used inside the SolarMutexGuard + // so to avoid concurrent writes to the property, + // and allow fast, lock-less access, guard here. + rtl::Reference< comphelper::SolarMutex > xMutexGuard( + comphelper::SolarMutex::get() ); + assert( rEvt.Source == mxConfig ); for ( auto it = maListeners.begin(); it != maListeners.end(); ++it ) { diff --git a/include/comphelper/configurationlistener.hxx b/include/comphelper/configurationlistener.hxx index 88edd77..0b9a872 100644 --- a/include/comphelper/configurationlistener.hxx +++ b/include/comphelper/configurationlistener.hxx @@ -37,6 +37,7 @@ public: void dispose() { mxListener.clear(); } }; +/// Access to this class must be protected by the SolarMutex template< typename uno_type > class ConfigurationListenerProperty : public ConfigurationListenerPropertyBase { uno_type maValue; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits