Kaydet (Commit) 7d2619c9 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Set mutex for external ref cache content.

Change-Id: Id00c0e553e08740df8d9b7eef19407e1b0d3f022
üst 29d1303e
......@@ -32,6 +32,7 @@
#include "types.hxx"
#include "rangelst.hxx"
#include "formula/token.hxx"
#include "osl/mutex.hxx"
#include <boost/unordered_map.hpp>
#include <boost/unordered_set.hpp>
......@@ -340,6 +341,7 @@ private:
DocItem* getDocItem(sal_uInt16 nFileId) const;
private:
mutable osl::Mutex maMtxDocs;
mutable DocDataType maDocs;
};
......@@ -682,7 +684,7 @@ public:
*
* @return true if the document still contains references to an unsaved file
*/
bool containsUnsavedReferences() { return !maUnsavedDocShells.empty(); }
bool containsUnsavedReferences() const { return !maUnsavedDocShells.empty(); }
void insertRefCell(sal_uInt16 nFileId, const ScAddress& rCell);
......
......@@ -494,6 +494,8 @@ ScExternalRefCache::~ScExternalRefCache() {}
const OUString* ScExternalRefCache::getRealTableName(sal_uInt16 nFileId, const OUString& rTabName) const
{
osl::MutexGuard aGuard(&maMtxDocs);
DocDataType::const_iterator itrDoc = maDocs.find(nFileId);
if (itrDoc == maDocs.end())
{
......@@ -515,6 +517,8 @@ const OUString* ScExternalRefCache::getRealTableName(sal_uInt16 nFileId, const O
const OUString* ScExternalRefCache::getRealRangeName(sal_uInt16 nFileId, const OUString& rRangeName) const
{
osl::MutexGuard aGuard(&maMtxDocs);
DocDataType::const_iterator itrDoc = maDocs.find(nFileId);
if (itrDoc == maDocs.end())
{
......@@ -535,6 +539,8 @@ const OUString* ScExternalRefCache::getRealRangeName(sal_uInt16 nFileId, const O
ScExternalRefCache::TokenRef ScExternalRefCache::getCellData(
sal_uInt16 nFileId, const OUString& rTabName, SCCOL nCol, SCROW nRow, sal_uInt32* pnFmtIndex)
{
osl::MutexGuard aGuard(&maMtxDocs);
DocDataType::const_iterator itrDoc = maDocs.find(nFileId);
if (itrDoc == maDocs.end())
{
......@@ -564,6 +570,8 @@ ScExternalRefCache::TokenRef ScExternalRefCache::getCellData(
ScExternalRefCache::TokenArrayRef ScExternalRefCache::getCellRangeData(
sal_uInt16 nFileId, const OUString& rTabName, const ScRange& rRange)
{
osl::MutexGuard aGuard(&maMtxDocs);
DocDataType::iterator itrDoc = maDocs.find(nFileId);
if (itrDoc == maDocs.end())
// specified document is not cached.
......@@ -673,6 +681,8 @@ ScExternalRefCache::TokenArrayRef ScExternalRefCache::getCellRangeData(
ScExternalRefCache::TokenArrayRef ScExternalRefCache::getRangeNameTokens(sal_uInt16 nFileId, const OUString& rName)
{
osl::MutexGuard aGuard(&maMtxDocs);
DocItem* pDoc = getDocItem(nFileId);
if (!pDoc)
return TokenArrayRef();
......@@ -688,6 +698,8 @@ ScExternalRefCache::TokenArrayRef ScExternalRefCache::getRangeNameTokens(sal_uIn
void ScExternalRefCache::setRangeNameTokens(sal_uInt16 nFileId, const OUString& rName, TokenArrayRef pArray)
{
osl::MutexGuard aGuard(&maMtxDocs);
DocItem* pDoc = getDocItem(nFileId);
if (!pDoc)
return;
......@@ -912,6 +924,8 @@ SCsTAB ScExternalRefCache::getTabSpan( sal_uInt16 nFileId, const OUString& rStar
void ScExternalRefCache::getAllNumberFormats(vector<sal_uInt32>& rNumFmts) const
{
osl::MutexGuard aGuard(&maMtxDocs);
using ::std::sort;
using ::std::unique;
......@@ -986,6 +1000,8 @@ bool ScExternalRefCache::setCacheTableReferenced( sal_uInt16 nFileId, const OUSt
void ScExternalRefCache::setAllCacheTableReferencedStati( bool bReferenced )
{
osl::MutexGuard aGuard(&maMtxDocs);
if (bReferenced)
{
maReferenced.reset(0);
......@@ -1174,11 +1190,14 @@ ScExternalRefCache::TableTypeRef ScExternalRefCache::getCacheTable(sal_uInt16 nF
void ScExternalRefCache::clearCache(sal_uInt16 nFileId)
{
osl::MutexGuard aGuard(&maMtxDocs);
maDocs.erase(nFileId);
}
ScExternalRefCache::DocItem* ScExternalRefCache::getDocItem(sal_uInt16 nFileId) const
{
osl::MutexGuard aGuard(&maMtxDocs);
using ::std::pair;
DocDataType::iterator itrDoc = maDocs.find(nFileId);
if (itrDoc == maDocs.end())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment