From 9c65c145ffd74f98a78dfa23c45bd89f41c62600 Mon Sep 17 00:00:00 2001 From: Travis Keep Date: Fri, 22 Nov 2013 23:08:24 +0000 Subject: [PATCH] ICU-8464 Remove dependency between LRUCache and mutex. X-SVN-Rev: 34691 --- icu4c/source/common/lrucache.cpp | 7 ++----- icu4c/source/common/lrucache.h | 7 ++----- icu4c/source/i18n/reldatefmt.cpp | 4 +++- icu4c/source/test/intltest/intltest.vcxproj | 4 +--- icu4c/source/test/intltest/lrucachetest.cpp | 17 +++++++---------- 5 files changed, 15 insertions(+), 24 deletions(-) diff --git a/icu4c/source/common/lrucache.cpp b/icu4c/source/common/lrucache.cpp index 4d6ffac8929..c94d35371b4 100644 --- a/icu4c/source/common/lrucache.cpp +++ b/icu4c/source/common/lrucache.cpp @@ -9,7 +9,6 @@ */ #include "lrucache.h" -#include "mutex.h" #include "uhash.h" #include "cstring.h" @@ -120,7 +119,6 @@ UBool LRUCache::contains(const char *localeId) const { void LRUCache::_get(const char *localeId, SharedPtr& ptr, UErrorCode &status) { - Mutex lock(mutex); CacheEntry2 *entry = (CacheEntry2 *) uhash_get(localeIdToEntries, localeId); if (entry != NULL) { moveToMostRecent(entry); @@ -172,12 +170,11 @@ void LRUCache::_get(const char *localeId, SharedPtr& ptr, UErrorCode &s ptr = entry->cachedData; } -LRUCache::LRUCache(int32_t size, UMutex *mtx, UErrorCode &status) : +LRUCache::LRUCache(int32_t size, UErrorCode &status) : mostRecentlyUsedMarker(NULL), leastRecentlyUsedMarker(NULL), localeIdToEntries(NULL), - maxSize(size), - mutex(mtx) { + maxSize(size) { if (U_FAILURE(status)) { return; } diff --git a/icu4c/source/common/lrucache.h b/icu4c/source/common/lrucache.h index 721b73166f5..3814e41d112 100644 --- a/icu4c/source/common/lrucache.h +++ b/icu4c/source/common/lrucache.h @@ -12,7 +12,6 @@ #define __LRU_CACHE_H__ #include "unicode/uobject.h" -#include "umutex.h" #include "sharedptr.h" struct UHashtable; @@ -40,7 +39,7 @@ class U_COMMON_API LRUCache : public UObject { virtual ~LRUCache(); protected: virtual UObject *create(const char *localeId, UErrorCode &status)=0; - LRUCache(int32_t maxSize, UMutex *mutex, UErrorCode &status); + LRUCache(int32_t maxSize, UErrorCode &status); private: LRUCache(); LRUCache(const LRUCache &other); @@ -50,7 +49,6 @@ class U_COMMON_API LRUCache : public UObject { CacheEntry2 *leastRecentlyUsedMarker; UHashtable *localeIdToEntries; int32_t maxSize; - UMutex *mutex; void moveToMostRecent(CacheEntry2 *cacheEntry); UBool init(const char *localeId, CacheEntry2 *cacheEntry); @@ -63,10 +61,9 @@ class U_COMMON_API SimpleLRUCache : public LRUCache { public: SimpleLRUCache( int32_t maxSize, - UMutex *mutex, CreateFunc cf, UErrorCode &status) : - LRUCache(maxSize, mutex, status), createFunc(cf) { + LRUCache(maxSize, status), createFunc(cf) { } virtual ~SimpleLRUCache(); protected: diff --git a/icu4c/source/i18n/reldatefmt.cpp b/icu4c/source/i18n/reldatefmt.cpp index 99b35a9019d..44c69a2f8f0 100644 --- a/icu4c/source/i18n/reldatefmt.cpp +++ b/icu4c/source/i18n/reldatefmt.cpp @@ -21,6 +21,7 @@ #include "cstring.h" #include "plurrule_impl.h" #include "ucln_in.h" +#include "mutex.h" #include "sharedptr.h" @@ -590,7 +591,7 @@ static UObject *U_CALLCONV createData(const char *localeId, UErrorCode &status) static void U_CALLCONV cacheInit(UErrorCode &status) { U_ASSERT(gCache == NULL); ucln_i18n_registerCleanup(UCLN_I18N_RELDATEFMT, reldatefmt_cleanup); - gCache = new SimpleLRUCache(100, &gCacheMutex, &createData, status); + gCache = new SimpleLRUCache(100, &createData, status); if (U_FAILURE(status)) { delete gCache; gCache = NULL; @@ -602,6 +603,7 @@ static void getFromCache(const char *locale, SharedPtr& pt if (U_FAILURE(status)) { return; } + Mutex lock(&gCacheMutex); gCache->get(locale, ptr, status); } diff --git a/icu4c/source/test/intltest/intltest.vcxproj b/icu4c/source/test/intltest/intltest.vcxproj index c248215efc2..e68ad6ef0c3 100644 --- a/icu4c/source/test/intltest/intltest.vcxproj +++ b/icu4c/source/test/intltest/intltest.vcxproj @@ -317,9 +317,7 @@ - - false - + diff --git a/icu4c/source/test/intltest/lrucachetest.cpp b/icu4c/source/test/intltest/lrucachetest.cpp index 8125a4c81fa..de324f2f394 100644 --- a/icu4c/source/test/intltest/lrucachetest.cpp +++ b/icu4c/source/test/intltest/lrucachetest.cpp @@ -11,9 +11,6 @@ #include "cstring.h" #include "intltest.h" #include "lrucache.h" -#include "umutex.h" - -static UMutex gMutex = U_MUTEX_INITIALIZER; class CopyOnWriteForTesting : public UObject { public: @@ -39,7 +36,7 @@ private: class LRUCacheForTesting : public LRUCache { public: LRUCacheForTesting( - int32_t maxSize, UMutex *mutex, + int32_t maxSize, const UnicodeString &dfs, UErrorCode &status); virtual ~LRUCacheForTesting() { } @@ -50,9 +47,9 @@ private: }; LRUCacheForTesting::LRUCacheForTesting( - int32_t maxSize, UMutex *mutex, + int32_t maxSize, const UnicodeString &dfs, UErrorCode &status) : - LRUCache(maxSize, mutex, status), defaultFormatStr() { + LRUCache(maxSize, status), defaultFormatStr() { if (U_FAILURE(status)) { return; } @@ -104,7 +101,7 @@ void LRUCacheTest::runIndexedTest(int32_t index, UBool exec, const char* &name, void LRUCacheTest::TestSharedPointer() { UErrorCode status = U_ZERO_ERROR; - LRUCacheForTesting cache(3, &gMutex, "little", status); + LRUCacheForTesting cache(3, "little", status); SharedPtr ptr; cache.get("boo", ptr, status); verifySharedPointer(ptr, "boo", "little"); @@ -130,12 +127,12 @@ void LRUCacheTest::TestSharedPointer() { void LRUCacheTest::TestErrorCallingConstructor() { UErrorCode status = U_MEMORY_ALLOCATION_ERROR; - LRUCacheForTesting cache(3, &gMutex, "little", status); + LRUCacheForTesting cache(3, "little", status); } void LRUCacheTest::TestLRUCache() { UErrorCode status = U_ZERO_ERROR; - LRUCacheForTesting cache(3, &gMutex, "little", status); + LRUCacheForTesting cache(3, "little", status); SharedPtr ptr1; SharedPtr ptr2; SharedPtr ptr3; @@ -224,7 +221,7 @@ void LRUCacheTest::TestLRUCache() { void LRUCacheTest::TestLRUCacheError() { UErrorCode status = U_ZERO_ERROR; - LRUCacheForTesting cache(3, &gMutex, "little", status); + LRUCacheForTesting cache(3, "little", status); SharedPtr ptr1; cache.get("error", ptr1, status); if (status != U_ILLEGAL_ARGUMENT_ERROR) { -- 2.40.0