[Libreoffice-commits] core.git: comphelper/source include/comphelper

Michael Meeks michael.meeks at collabora.com
Fri Oct 9 07:52:29 PDT 2015


 comphelper/source/misc/configuration.cxx     |    7 +++++++
 include/comphelper/configurationlistener.hxx |    1 +
 2 files changed, 8 insertions(+)

New commits:
commit c0096b5b8412a8bfd40b84491e6d6eccd6d98504
Author: Michael Meeks <michael.meeks at 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 <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at 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;


More information about the Libreoffice-commits mailing list