From 9bdfc68c2de25631abe3b264aafa3be09459d3b7 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 4 Aug 2012 12:52:42 +0000 Subject: [PATCH] *RichText: Resolved deadlock situation git-svn-id: svn://ultimatepp.org/upp/trunk@5255 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Util.h | 4 ++-- uppsrc/RichText/ParaData.cpp | 6 ++---- uppsrc/RichText/ParaType.cpp | 6 ++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/uppsrc/Core/Util.h b/uppsrc/Core/Util.h index 9b09bd4c8..0d7b621b5 100644 --- a/uppsrc/Core/Util.h +++ b/uppsrc/Core/Util.h @@ -128,8 +128,8 @@ INITBLOCK { AddIniInfo(#var, AsStringIniCurrent_##var, AsStringIniDefault_##var, #define INI_INT64(var, def, info) INI_TYPE(var, def, info, int64, IniInt64, 0); #define INI_DOUBLE(var, def, info) INI_TYPE(var, def, info, double, IniDouble, 0); -#define INI_STRING(var, def, info) String& DefRef##_var() { static String x; return x; }\ - INI_TYPE(var, def, info, String, IniString, DefRef##_var); +#define INI_STRING(var, def, info) String& DefRef_##var() { static String x; return x; }\ + INI_TYPE(var, def, info, String, IniString, DefRef_##var); /* #define INI_BOOL(var, def, info)\ diff --git a/uppsrc/RichText/ParaData.cpp b/uppsrc/RichText/ParaData.cpp index a2937d45a..37d2aa468 100644 --- a/uppsrc/RichText/ParaData.cpp +++ b/uppsrc/RichText/ParaData.cpp @@ -2,8 +2,6 @@ NAMESPACE_UPP -static StaticMutex sCacheMutex; - Array& RichPara::Cache() { static Array x; @@ -26,7 +24,7 @@ RichPara::RichPara() RichPara::~RichPara() { if(cacheid && !part.IsPicked() && !incache) { - Mutex::Lock __(sCacheMutex); + DrawLock __; Array& cache = Cache(); incache = true; cache.InsertPick(0, *this); @@ -568,7 +566,7 @@ void RichPara::Unpack(const String& data, const Array& obj, format = style; if(cacheid) { - Mutex::Lock __(sCacheMutex); + DrawLock __; Array& cache = Cache(); for(int i = 0; i < cache.GetCount(); i++) if(cache[i].cacheid == cacheid) { diff --git a/uppsrc/RichText/ParaType.cpp b/uppsrc/RichText/ParaType.cpp index 626c437ad..e68a53865 100644 --- a/uppsrc/RichText/ParaType.cpp +++ b/uppsrc/RichText/ParaType.cpp @@ -212,12 +212,10 @@ Array& RichPara::Lines::Cache() return x; } -static StaticMutex sLineCacheMutex; - RichPara::Lines::~Lines() { if(cacheid && !line.IsPicked() && !incache) { - Mutex::Lock __(sLineCacheMutex); + DrawLock __; Array& cache = Cache(); incache = true; cache.Insert(0) = *this; @@ -238,7 +236,7 @@ RichPara::Lines RichPara::FormatLines(int acx) const { Lines lines; if(cacheid) { - Mutex::Lock __(sLineCacheMutex); + DrawLock __; Array& cache = Lines::Cache(); for(int i = 0; i < cache.GetCount(); i++) if(cache[i].cacheid == cacheid && cache[i].cx == acx) {