[Libreoffice-commits] core.git: toolkit/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Wed Aug 4 06:41:20 UTC 2021


 toolkit/source/controls/formattedcontrol.cxx |   46 +++++++++------------------
 1 file changed, 17 insertions(+), 29 deletions(-)

New commits:
commit 1082943bd8ab8174f0256f41b0d417950060e240
Author:     Noel Grandin <noelgrandin at gmail.com>
AuthorDate: Tue Aug 3 20:40:26 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Wed Aug 4 08:40:47 2021 +0200

    osl::Mutex->std::mutex in getDefaultFormats
    
    Change-Id: I884416cae7d968f1869fb949eb81ab378573a4dd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119950
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/toolkit/source/controls/formattedcontrol.cxx b/toolkit/source/controls/formattedcontrol.cxx
index d2acd9c2e17d..2a24c23c53b7 100644
--- a/toolkit/source/controls/formattedcontrol.cxx
+++ b/toolkit/source/controls/formattedcontrol.cxx
@@ -31,6 +31,7 @@
 #include <osl/diagnose.h>
 
 #include <helper/unopropertyarrayhelper.hxx>
+#include <mutex>
 
 namespace toolkit
 {
@@ -46,61 +47,48 @@ namespace toolkit
     namespace
     {
 
-        ::osl::Mutex& getDefaultFormatsMutex()
+        std::mutex& getDefaultFormatsMutex()
         {
-            static ::osl::Mutex s_aDefaultFormatsMutex;
+            static std::mutex s_aDefaultFormatsMutex;
             return s_aDefaultFormatsMutex;
         }
 
-
-        Reference< XNumberFormatsSupplier >& lcl_getDefaultFormatsAccess_nothrow()
-        {
-            static Reference< XNumberFormatsSupplier > s_xDefaultFormats;
-            return s_xDefaultFormats;
-        }
-
-
+        Reference< XNumberFormatsSupplier > s_xDefaultFormats;
         bool s_bTriedCreation = false;
+        oslInterlockedCount  s_refCount(0);
 
         const Reference< XNumberFormatsSupplier >& lcl_getDefaultFormats_throw()
         {
-            ::osl::MutexGuard aGuard( getDefaultFormatsMutex() );
+            std::scoped_lock aGuard( getDefaultFormatsMutex() );
 
-            Reference< XNumberFormatsSupplier >& rDefaultFormats( lcl_getDefaultFormatsAccess_nothrow() );
-            if ( !rDefaultFormats.is() && !s_bTriedCreation )
+            if ( !s_xDefaultFormats.is() && !s_bTriedCreation )
             {
                 s_bTriedCreation = true;
-                rDefaultFormats = NumberFormatsSupplier::createWithDefaultLocale( ::comphelper::getProcessComponentContext() );
+                s_xDefaultFormats = NumberFormatsSupplier::createWithDefaultLocale( ::comphelper::getProcessComponentContext() );
             }
-            if ( !rDefaultFormats.is() )
+            if ( !s_xDefaultFormats.is() )
                 throw RuntimeException();
 
-            return rDefaultFormats;
+            return s_xDefaultFormats;
         }
 
-
-        oslInterlockedCount  s_refCount(0);
-
-
         void    lcl_registerDefaultFormatsClient()
         {
             osl_atomic_increment( &s_refCount );
         }
 
-
         void    lcl_revokeDefaultFormatsClient()
         {
-            ::osl::ClearableMutexGuard aGuard( getDefaultFormatsMutex() );
-            if ( 0 == osl_atomic_decrement( &s_refCount ) )
+            Reference< XNumberFormatsSupplier > xReleasePotentialLastReference;
             {
-                Reference< XNumberFormatsSupplier >& rDefaultFormats( lcl_getDefaultFormatsAccess_nothrow() );
-                Reference< XNumberFormatsSupplier > xReleasePotentialLastReference( rDefaultFormats );
-                rDefaultFormats.clear();
-                s_bTriedCreation = false;
+                std::scoped_lock aGuard( getDefaultFormatsMutex() );
+                if ( 0 != osl_atomic_decrement( &s_refCount ) )
+                    return;
 
-                aGuard.clear();
-                xReleasePotentialLastReference.clear();
+                xReleasePotentialLastReference = std::move(s_xDefaultFormats);
+                s_bTriedCreation = false;
             }
+            xReleasePotentialLastReference.clear();
         }
     }
 


More information about the Libreoffice-commits mailing list