Add mutex to guard the shared string pool content.

Change-Id: I0eb97d0fbeaefd8a1c86d240ed8bd7f208fb662e
This commit is contained in:
Kohei Yoshida
2013-11-05 14:38:28 -05:00
parent 9611851a53
commit 7045802f27
2 changed files with 8 additions and 0 deletions

View File

@@ -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;

View File

@@ -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();
}