X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/51004dcb01e06fef634b61be77ed73dd61cb6db9..3d1f044b704633e2e541231cd17ae9ecf9ad5c7a:/icuSources/io/locbund.cpp diff --git a/icuSources/io/locbund.cpp b/icuSources/io/locbund.cpp index 8486f996..4b6fe34c 100644 --- a/icuSources/io/locbund.cpp +++ b/icuSources/io/locbund.cpp @@ -1,7 +1,9 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * -* Copyright (C) 1998-2012, International Business Machines +* Copyright (C) 1998-2014, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -18,13 +20,14 @@ #include "unicode/utypes.h" -#if !UCONFIG_NO_FORMATTING +#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_CONVERSION #include "locbund.h" #include "cmemory.h" #include "cstring.h" #include "ucln_io.h" +#include "mutex.h" #include "umutex.h" #include "unicode/ustring.h" #include "unicode/uloc.h" @@ -42,27 +45,24 @@ static UBool U_CALLCONV locbund_cleanup(void) { } U_CDECL_END - static inline UNumberFormat * copyInvariantFormatter(ULocaleBundle *result, UNumberFormatStyle style) { + U_NAMESPACE_USE + static UMutex *gLock = STATIC_NEW(UMutex); + Mutex lock(gLock); if (result->fNumberFormat[style-1] == NULL) { - UErrorCode status = U_ZERO_ERROR; - UBool needsInit; - - UMTX_CHECK(NULL, gPosixNumberFormat[style-1] == NULL, needsInit); - if (needsInit) { + if (gPosixNumberFormat[style-1] == NULL) { + UErrorCode status = U_ZERO_ERROR; UNumberFormat *formatAlias = unum_open(style, NULL, 0, "en_US_POSIX", NULL, &status); - - /* Cache upon first request. */ if (U_SUCCESS(status)) { - umtx_lock(NULL); gPosixNumberFormat[style-1] = formatAlias; ucln_io_registerCleanup(UCLN_IO_LOCBUND, locbund_cleanup); - umtx_unlock(NULL); } } - /* Copy the needed formatter. */ - result->fNumberFormat[style-1] = unum_clone(gPosixNumberFormat[style-1], &status); + if (gPosixNumberFormat[style-1] != NULL) { + UErrorCode status = U_ZERO_ERROR; + result->fNumberFormat[style-1] = unum_clone(gPosixNumberFormat[style-1], &status); + } } return result->fNumberFormat[style-1]; }