[Libreoffice-commits] core.git: Branch 'libreoffice-7-2' - sal/rtl

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 22 07:33:44 UTC 2021


 sal/rtl/bootstrap.cxx |   59 +++++++++++---------------------------------------
 1 file changed, 13 insertions(+), 46 deletions(-)

New commits:
commit 08a879ac8f759c9d0c5cc9569c9c43d058cc9a16
Author:     Noel Grandin <noel at peralex.com>
AuthorDate: Sun Jun 20 19:10:50 2021 +0200
Commit:     Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Tue Jun 22 09:33:11 2021 +0200

    simplify bootstrap_map (tdf#135316 related)
    
    No need for this indirection
    
    Change-Id: I87c90c9f1a7904f5a506acac631fe5a1f52f9190
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117521
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
    (cherry picked from commit 2e3046cc6fdebb52cfb1cdc114a9c2cd26bcc178)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117565
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx
index 4f5c2f732dc1..45c330a56edb 100644
--- a/sal/rtl/bootstrap.cxx
+++ b/sal/rtl/bootstrap.cxx
@@ -581,38 +581,10 @@ void Bootstrap_Impl::expandValue(
 
 namespace {
 
-struct bootstrap_map {
-    typedef std::unordered_map<
-        OUString, Bootstrap_Impl * > t;
-
-    bootstrap_map(const bootstrap_map&) = delete;
-    bootstrap_map& operator=(const bootstrap_map&) = delete;
-
-    // get and release must only be called properly synchronized via some mutex
-    // (e.g., osl::Mutex::getGlobalMutex()):
-
-    static t * get()
-    {
-        if (!m_map)
-            m_map = new t;
-
-        return m_map;
-    }
-
-    static void release()
-    {
-        if (m_map != nullptr && m_map->empty())
-        {
-            delete m_map;
-            m_map = nullptr;
-        }
-    }
-
-private:
-    static t * m_map;
-};
-
-bootstrap_map::t * bootstrap_map::m_map = nullptr;
+// This map must only be called properly synchronized via some mutex
+// (e.g., osl::Mutex::getGlobalMutex()):
+typedef std::unordered_map< OUString, Bootstrap_Impl * > bootstrap_map_t;
+bootstrap_map_t bootstrap_map;
 
 }
 
@@ -633,21 +605,18 @@ rtlBootstrapHandle SAL_CALL rtl_bootstrap_args_open(rtl_uString * pIniName)
 
     Bootstrap_Impl * that;
     osl::ResettableMutexGuard guard(osl::Mutex::getGlobalMutex());
-    bootstrap_map::t* p_bootstrap_map = bootstrap_map::get();
-    bootstrap_map::t::const_iterator iFind(p_bootstrap_map->find(iniName));
-    if (iFind == p_bootstrap_map->end())
+    auto iFind(bootstrap_map.find(iniName));
+    if (iFind == bootstrap_map.end())
     {
-        bootstrap_map::release();
         guard.clear();
         that = new Bootstrap_Impl(iniName);
         guard.reset();
-        p_bootstrap_map = bootstrap_map::get();
-        iFind = p_bootstrap_map->find(iniName);
-        if (iFind == p_bootstrap_map->end())
+        iFind = bootstrap_map.find(iniName);
+        if (iFind == bootstrap_map.end())
         {
             ++that->_nRefCount;
-            ::std::pair< bootstrap_map::t::iterator, bool > insertion(
-                p_bootstrap_map->emplace(iniName, that));
+            ::std::pair< bootstrap_map_t::iterator, bool > insertion(
+                bootstrap_map.emplace(iniName, that));
             OSL_ASSERT(insertion.second);
         }
         else
@@ -675,23 +644,21 @@ void SAL_CALL rtl_bootstrap_args_close(rtlBootstrapHandle handle) SAL_THROW_EXTE
     Bootstrap_Impl * that = static_cast< Bootstrap_Impl * >( handle );
 
     osl::MutexGuard guard(osl::Mutex::getGlobalMutex());
-    bootstrap_map::t* p_bootstrap_map = bootstrap_map::get();
-    OSL_ASSERT(p_bootstrap_map->find(that->_iniName)->second == that);
+    OSL_ASSERT(bootstrap_map.find(that->_iniName)->second == that);
     --that->_nRefCount;
 
     if (that->_nRefCount != 0)
         return;
 
     std::size_t const nLeaking = 8; // only hold up to 8 files statically
-    if (p_bootstrap_map->size() > nLeaking)
+    if (bootstrap_map.size() > nLeaking)
     {
-        ::std::size_t erased = p_bootstrap_map->erase( that->_iniName );
+        ::std::size_t erased = bootstrap_map.erase( that->_iniName );
         if (erased != 1) {
             OSL_ASSERT( false );
         }
         delete that;
     }
-    bootstrap_map::release();
 }
 
 sal_Bool SAL_CALL rtl_bootstrap_get_from_handle(


More information about the Libreoffice-commits mailing list