]> granicus.if.org Git - icu/commitdiff
ICU-13676 Enabling cleanup of default converter whenever the default converter is...
authorShane Carr <shane@unicode.org>
Thu, 3 May 2018 06:50:50 +0000 (06:50 +0000)
committerShane Carr <shane@unicode.org>
Thu, 3 May 2018 06:50:50 +0000 (06:50 +0000)
X-SVN-Rev: 41314

icu4c/source/common/ucnv_bld.cpp
icu4c/source/common/ucnv_bld.h
icu4c/source/common/ustr_cnv.cpp

index 14de21bd7391390415e42cd888d44a632718d607..7596687435d7f23ab0a1b81255a097482f977128 100644 (file)
@@ -261,6 +261,11 @@ static UBool U_CALLCONV ucnv_cleanup(void) {
     return (SHARED_DATA_HASHTABLE == NULL);
 }
 
+U_CAPI void U_EXPORT2
+ucnv_enableCleanup() {
+    ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
+}
+
 static UBool U_CALLCONV
 isCnvAcceptable(void * /*context*/,
                 const char * /*type*/, const char * /*name*/,
@@ -439,7 +444,7 @@ ucnv_shareConverterData(UConverterSharedData * data)
         SHARED_DATA_HASHTABLE = uhash_openSize(uhash_hashChars, uhash_compareChars, NULL,
                             ucnv_io_countKnownConverters(&err)*UCNV_CACHE_LOAD_FACTOR,
                             &err);
-        ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
+        ucnv_enableCleanup();
 
         if (U_FAILURE(err))
             return;
@@ -1099,7 +1104,7 @@ static void U_CALLCONV initAvailableConvertersList(UErrorCode &errCode) {
     U_ASSERT(gAvailableConverterCount == 0);
     U_ASSERT(gAvailableConverters == NULL);
 
-    ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
+    ucnv_enableCleanup();
     UEnumeration *allConvEnum = ucnv_openAllNames(&errCode);
     int32_t allConverterCount = uenum_count(allConvEnum, &errCode);
     if (U_FAILURE(errCode)) {
@@ -1205,7 +1210,7 @@ internalSetName(const char *name, UErrorCode *status) {
     //             -- Andy
     gDefaultConverterName = gDefaultConverterNameBuffer;
 
-    ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
+    ucnv_enableCleanup();
 
     umtx_unlock(&cnvCacheMutex);
 }
index a1e2df6730ca40cb021a12be750b90e11f23f8a3..18b3795e4d8b13a0f55cd0cd837b24f68b1e5581 100644 (file)
@@ -288,6 +288,9 @@ ucnv_swap(const UDataSwapper *ds,
           const void *inData, int32_t length, void *outData,
           UErrorCode *pErrorCode);
 
+U_CAPI void U_EXPORT2
+ucnv_enableCleanup();
+
 #endif
 
 #endif /* _UCNV_BLD */
index 38f4d82105cfce78a72c26f580a9e696de79ed78..97c78bfaca972e893f403a624c595d52f4c592f9 100644 (file)
@@ -28,6 +28,7 @@
 #include "cmemory.h"
 #include "umutex.h"
 #include "ustr_cnv.h"
+#include "ucnv_bld.h"
 
 /* mutexed access to a shared default converter ----------------------------- */
 
@@ -68,8 +69,8 @@ u_releaseDefaultConverter(UConverter *converter)
         if (converter != NULL) {
             ucnv_reset(converter);
         }
+        ucnv_enableCleanup();
         umtx_lock(NULL);
-
         if(gDefaultConverter == NULL) {
             gDefaultConverter = converter;
             converter = NULL;