[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