sdext/source/minimizer/pppoptimizertoken.cxx |   31 +++++++++------------------
 1 file changed, 11 insertions(+), 20 deletions(-)

New commits:
commit 3dcc288468eb2a71ba1381412dd7e25b9fb329d9
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Wed Jul 17 13:15:51 2024 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Thu Jul 18 11:52:22 2024 +0200

    cid#1555824 Check of thread-shared field evades lock acquisition
    
    Change-Id: Ic0e8e87138ca86a1618e110516f3d8cef481dec7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170626
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/sdext/source/minimizer/pppoptimizertoken.cxx 
b/sdext/source/minimizer/pppoptimizertoken.cxx
index 472992551b81..73d1280c3a29 100644
--- a/sdext/source/minimizer/pppoptimizertoken.cxx
+++ b/sdext/source/minimizer/pppoptimizertoken.cxx
@@ -23,15 +23,8 @@
 #include <sal/macros.h>
 #include <unordered_map>
 #include <memory>
-#include <mutex>
 
 typedef std::unordered_map< const char*, PPPOptimizerTokenEnum, 
rtl::CStringHash, rtl::CStringEqual> TypeNameHashMap;
-static TypeNameHashMap* pHashMap = nullptr;
-static std::mutex& getHashMapMutex()
-{
-    static std::mutex s_aHashMapProtection;
-    return s_aHashMapProtection;
-}
 
 namespace {
 
@@ -110,21 +103,19 @@ const TokenTable pTokenTableArray[] =
     { "NotFound",           TK_NotFound }
 };
 
+static TypeNameHashMap* createHashMap()
+{
+    TypeNameHashMap* pH = new TypeNameHashMap;
+    const TokenTable* pPtr = pTokenTableArray;
+    const TokenTable* pEnd = pPtr + SAL_N_ELEMENTS( pTokenTableArray );
+    for ( ; pPtr < pEnd; pPtr++ )
+        (*pH)[ pPtr->pS ] = pPtr->pE;
+    return pH;
+}
+
 PPPOptimizerTokenEnum TKGet( std::u16string_view rToken )
 {
-    if ( !pHashMap )
-    {   // init hash map
-        std::scoped_lock aGuard( getHashMapMutex() );
-        if ( !pHashMap )
-        {
-            TypeNameHashMap* pH = new TypeNameHashMap;
-            const TokenTable* pPtr = pTokenTableArray;
-            const TokenTable* pEnd = pPtr + SAL_N_ELEMENTS( pTokenTableArray );
-            for ( ; pPtr < pEnd; pPtr++ )
-                (*pH)[ pPtr->pS ] = pPtr->pE;
-            pHashMap = pH;
-        }
-    }
+    static TypeNameHashMap* pHashMap = createHashMap();
     PPPOptimizerTokenEnum eRetValue = TK_NotFound;
     size_t i, nLen = rToken.size();
     std::unique_ptr<char[]> pBuf(new char[ nLen + 1 ]);

Reply via email to