| Index: patches/dataload.patch
|
| diff --git a/patches/dataload.patch b/patches/dataload.patch
|
| deleted file mode 100644
|
| index f246f157938ed37dd8381f3b7df346e52a977e55..0000000000000000000000000000000000000000
|
| --- a/patches/dataload.patch
|
| +++ /dev/null
|
| @@ -1,152 +0,0 @@
|
| -diff --git a/source/common/udata.cpp b/source/common/udata.cpp
|
| -index e6d8a35..80bea06 100644
|
| ---- a/source/common/udata.cpp
|
| -+++ b/source/common/udata.cpp
|
| -@@ -1,7 +1,7 @@
|
| - /*
|
| - ******************************************************************************
|
| - *
|
| --* Copyright (C) 1999-2014, International Business Machines
|
| -+* Copyright (C) 1999-2015, International Business Machines
|
| - * Corporation and others. All Rights Reserved.
|
| - *
|
| - ******************************************************************************
|
| -@@ -29,6 +29,7 @@ might have to #include some other header
|
| - #include "charstr.h"
|
| - #include "cmemory.h"
|
| - #include "cstring.h"
|
| -+#include "mutex.h"
|
| - #include "putilimp.h"
|
| - #include "uassert.h"
|
| - #include "ucln_cmn.h"
|
| -@@ -100,14 +101,15 @@ static UDataMemory *udata_findCachedData(const char *path);
|
| - * that they really need, reducing the size of binaries that take advantage
|
| - * of this.
|
| - */
|
| --static UDataMemory *gCommonICUDataArray[10] = { NULL };
|
| -+static UDataMemory *gCommonICUDataArray[10] = { NULL }; // Access protected by icu global mutex.
|
| -
|
| --static UBool gHaveTriedToLoadCommonData = FALSE; /* See extendICUData(). */
|
| -+static u_atomic_int32_t gHaveTriedToLoadCommonData = ATOMIC_INT32_T_INITIALIZER(0); // See extendICUData().
|
| -
|
| - static UHashtable *gCommonDataCache = NULL; /* Global hash table of opened ICU data files. */
|
| - static icu::UInitOnce gCommonDataCacheInitOnce = U_INITONCE_INITIALIZER;
|
| -
|
| --static UDataFileAccess gDataFileAccess = UDATA_DEFAULT_ACCESS;
|
| -+static UDataFileAccess gDataFileAccess = UDATA_DEFAULT_ACCESS; // Access not synchronized.
|
| -+ // Modifying is documented as thread-unsafe.
|
| -
|
| - static UBool U_CALLCONV
|
| - udata_cleanup(void)
|
| -@@ -124,7 +126,7 @@ udata_cleanup(void)
|
| - udata_close(gCommonICUDataArray[i]);
|
| - gCommonICUDataArray[i] = NULL;
|
| - }
|
| -- gHaveTriedToLoadCommonData = FALSE;
|
| -+ gHaveTriedToLoadCommonData = 0;
|
| -
|
| - return TRUE; /* Everything was cleaned up */
|
| - }
|
| -@@ -139,14 +141,16 @@ findCommonICUDataByName(const char *inBasename)
|
| - if (pData == NULL)
|
| - return FALSE;
|
| -
|
| -- for (i = 0; i < UPRV_LENGTHOF(gCommonICUDataArray); ++i) {
|
| -- if ((gCommonICUDataArray[i] != NULL) && (gCommonICUDataArray[i]->pHeader == pData->pHeader)) {
|
| -- /* The data pointer is already in the array. */
|
| -- found = TRUE;
|
| -- break;
|
| -+ {
|
| -+ Mutex lock;
|
| -+ for (i = 0; i < UPRV_LENGTHOF(gCommonICUDataArray); ++i) {
|
| -+ if ((gCommonICUDataArray[i] != NULL) && (gCommonICUDataArray[i]->pHeader == pData->pHeader)) {
|
| -+ /* The data pointer is already in the array. */
|
| -+ found = TRUE;
|
| -+ break;
|
| -+ }
|
| - }
|
| - }
|
| --
|
| - return found;
|
| - }
|
| -
|
| -@@ -663,7 +667,11 @@ openCommonData(const char *path, /* Path from OpenChoice? */
|
| - if(commonDataIndex >= UPRV_LENGTHOF(gCommonICUDataArray)) {
|
| - return NULL;
|
| - }
|
| -- if(gCommonICUDataArray[commonDataIndex] == NULL) {
|
| -+ {
|
| -+ Mutex lock;
|
| -+ if(gCommonICUDataArray[commonDataIndex] != NULL) {
|
| -+ return gCommonICUDataArray[commonDataIndex];
|
| -+ }
|
| - int32_t i;
|
| - for(i = 0; i < commonDataIndex; ++i) {
|
| - if(gCommonICUDataArray[i]->pHeader == &U_ICUDATA_ENTRY_POINT.hdr) {
|
| -@@ -671,23 +679,26 @@ openCommonData(const char *path, /* Path from OpenChoice? */
|
| - return NULL;
|
| - }
|
| - }
|
| -+ }
|
| -
|
| -- /* Add the linked-in data to the list. */
|
| -- /*
|
| -- * This is where we would check and call weakly linked partial-data-library
|
| -- * access functions.
|
| -- */
|
| -- /*
|
| -- if (uprv_getICUData_collation) {
|
| -- setCommonICUDataPointer(uprv_getICUData_collation(), FALSE, pErrorCode);
|
| -- }
|
| -- if (uprv_getICUData_conversion) {
|
| -- setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode);
|
| -- }
|
| -- */
|
| -- setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT.hdr, FALSE, pErrorCode);
|
| -+ /* Add the linked-in data to the list. */
|
| -+ /*
|
| -+ * This is where we would check and call weakly linked partial-data-library
|
| -+ * access functions.
|
| -+ */
|
| -+ /*
|
| -+ if (uprv_getICUData_collation) {
|
| -+ setCommonICUDataPointer(uprv_getICUData_collation(), FALSE, pErrorCode);
|
| -+ }
|
| -+ if (uprv_getICUData_conversion) {
|
| -+ setCommonICUDataPointer(uprv_getICUData_conversion(), FALSE, pErrorCode);
|
| -+ }
|
| -+ */
|
| -+ setCommonICUDataPointer(&U_ICUDATA_ENTRY_POINT.hdr, FALSE, pErrorCode);
|
| -+ {
|
| -+ Mutex lock;
|
| -+ return gCommonICUDataArray[commonDataIndex];
|
| - }
|
| -- return gCommonICUDataArray[commonDataIndex];
|
| - }
|
| -
|
| -
|
| -@@ -795,7 +806,7 @@ static UBool extendICUData(UErrorCode *pErr)
|
| - static UMutex extendICUDataMutex = U_MUTEX_INITIALIZER;
|
| - umtx_lock(&extendICUDataMutex);
|
| - #endif
|
| -- if(!gHaveTriedToLoadCommonData) {
|
| -+ if(!umtx_loadAcquire(gHaveTriedToLoadCommonData)) {
|
| - /* See if we can explicitly open a .dat file for the ICUData. */
|
| - pData = openCommonData(
|
| - U_ICUDATA_NAME, /* "icudt20l" , for example. */
|
| -@@ -820,7 +831,7 @@ static UBool extendICUData(UErrorCode *pErr)
|
| - pErr); /* setCommonICUData honors errors; NOP if error set */
|
| - }
|
| -
|
| -- gHaveTriedToLoadCommonData = TRUE;
|
| -+ umtx_storeRelease(gHaveTriedToLoadCommonData, 1);
|
| - }
|
| -
|
| - didUpdate = findCommonICUDataByName(U_ICUDATA_NAME); /* Return 'true' when a racing writes out the extended */
|
| -@@ -1398,5 +1409,6 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo) {
|
| -
|
| - U_CAPI void U_EXPORT2 udata_setFileAccess(UDataFileAccess access, UErrorCode * /*status*/)
|
| - {
|
| -+ // Note: this function is documented as not thread safe.
|
| - gDataFileAccess = access;
|
| - }
|
|
|