[Libreoffice-commits] core.git: Branch 'private/kohei/xlsx-import-speedup' - include/svl svl/source

Kohei Yoshida kohei.yoshida at collabora.com
Tue Nov 5 20:37:26 CET 2013


 include/svl/sharedstringpool.hxx     |    2 ++
 svl/source/misc/sharedstringpool.cxx |    6 ++++++
 2 files changed, 8 insertions(+)

New commits:
commit 625a17774bfceabbce9f298d7be6bf4fa2e43ea6
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Tue Nov 5 14:38:28 2013 -0500

    Add mutex to guard the shared string pool content.
    
    Change-Id: I0eb97d0fbeaefd8a1c86d240ed8bd7f208fb662e

diff --git a/include/svl/sharedstringpool.hxx b/include/svl/sharedstringpool.hxx
index 1b2796d..b2cb367 100644
--- a/include/svl/sharedstringpool.hxx
+++ b/include/svl/sharedstringpool.hxx
@@ -11,6 +11,7 @@
 #define INCLUDED_SVL_SHAREDSTRINGPOOL_HXX
 
 #include "svl/sharedstring.hxx"
+#include "osl/mutex.hxx"
 
 #include <boost/unordered_map.hpp>
 #include <boost/unordered_set.hpp>
@@ -30,6 +31,7 @@ class SVL_DLLPUBLIC SharedStringPool
     typedef std::pair<StrHashType::iterator, bool> InsertResultType;
     typedef boost::unordered_map<const rtl_uString*, OUString> StrStoreType;
 
+    mutable osl::Mutex maMutex;
     StrHashType maStrPool;
     StrHashType maStrPoolUpper;
     StrStoreType maStrStore;
diff --git a/svl/source/misc/sharedstringpool.cxx b/svl/source/misc/sharedstringpool.cxx
index 46bf814..1e85da5 100644
--- a/svl/source/misc/sharedstringpool.cxx
+++ b/svl/source/misc/sharedstringpool.cxx
@@ -17,6 +17,8 @@ SharedStringPool::SharedStringPool( const CharClass* pCharClass ) : mpCharClass(
 
 SharedString SharedStringPool::intern( const OUString& rStr )
 {
+    osl::MutexGuard aGuard(&maMutex);
+
     InsertResultType aRes = findOrInsert(maStrPool, rStr);
     if (aRes.first == maStrPool.end())
         // Insertion failed.
@@ -63,6 +65,8 @@ inline sal_Int32 getRefCount( const rtl_uString* p )
 
 void SharedStringPool::purge()
 {
+    osl::MutexGuard aGuard(&maMutex);
+
     StrHashType aNewStrPool;
     StrHashType::iterator it = maStrPool.begin(), itEnd = maStrPool.end();
     for (; it != itEnd; ++it)
@@ -98,11 +102,13 @@ void SharedStringPool::purge()
 
 size_t SharedStringPool::getCount() const
 {
+    osl::MutexGuard aGuard(&maMutex);
     return maStrPool.size();
 }
 
 size_t SharedStringPool::getCountIgnoreCase() const
 {
+    osl::MutexGuard aGuard(&maMutex);
     return maStrPoolUpper.size();
 }
 


More information about the Libreoffice-commits mailing list