sfx2/source/doc/sfxbasemodel.cxx |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

New commits:
commit 5995f21774754d306ead2763e1bf4ef357f5a23b
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri May 31 12:56:37 2024 +0200
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Fri May 31 20:13:07 2024 +0200

    Avoid race
    
    There are reports that RuntimeUID may be some unexpected value like
    1206137128392, in unclear cases. This is a blind shot at that.
    
    Change-Id: I724f082c361243beb4bd2ac14edf3176259f15d3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168209
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index cd00bff1a4f7..d52c3cbe7a86 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -198,7 +198,7 @@ void SAL_CALL SfxDocInfoListener_Impl::disposing( const 
lang::EventObject& )
 struct IMPL_SfxBaseModel_DataContainer : public ::sfx2::IModifiableDocument
 {
     // counter for SfxBaseModel instances created.
-    static sal_Int64                                           
g_nInstanceCounter       ;
+    inline static std::atomic<sal_Int64>                       
g_nInstanceCounter = 0   ;
     SfxObjectShellRef                                          m_pObjectShell  
         ;
     OUString                                                   m_sURL          
         ;
     OUString                                                   m_sRuntimeUID   
         ;
@@ -256,10 +256,8 @@ struct IMPL_SfxBaseModel_DataContainer : public 
::sfx2::IModifiableDocument
             ,   m_bExternalTitle        ( false     )
             ,   m_bDisposing            ( false     )
     {
-        // increase global instance counter.
-        ++g_nInstanceCounter;
-        // set own Runtime UID
-        m_sRuntimeUID = OUString::number( g_nInstanceCounter );
+        // increase global instance counter, and set own Runtime UID
+        m_sRuntimeUID = OUString::number(++g_nInstanceCounter);
     }
 
     virtual ~IMPL_SfxBaseModel_DataContainer()
@@ -340,9 +338,6 @@ struct IMPL_SfxBaseModel_DataContainer : public 
::sfx2::IModifiableDocument
     }
 };
 
-// static member initialization.
-sal_Int64 IMPL_SfxBaseModel_DataContainer::g_nInstanceCounter = 0;
-
 namespace {
 
 // Listener that forwards notifications from the PrintHelper to the "real" 
listeners

Reply via email to