diff options
author | Filip Navara <filip.navara@gmail.com> | 2019-02-05 21:29:01 +0100 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2019-02-05 12:29:01 -0800 |
commit | 49826b7454d967e860ec116866f8c0d7d9f3f8a0 (patch) | |
tree | 5af80d51c88e6b2c412b0ee3b3b5169d2b05a6f0 /src/corefx | |
parent | 254eb202bdcdaf2eb2325d3ea20f96c319f0f947 (diff) | |
download | coreclr-49826b7454d967e860ec116866f8c0d7d9f3f8a0.tar.gz coreclr-49826b7454d967e860ec116866f8c0d7d9f3f8a0.tar.bz2 coreclr-49826b7454d967e860ec116866f8c0d7d9f3f8a0.zip |
Avoid duplicate tree lookup in GetCollatorFromSortHandle (#22390)
Diffstat (limited to 'src/corefx')
-rw-r--r-- | src/corefx/System.Globalization.Native/pal_collation.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/corefx/System.Globalization.Native/pal_collation.c b/src/corefx/System.Globalization.Native/pal_collation.c index a0ce96d1fd..a8c94cfb71 100644 --- a/src/corefx/System.Globalization.Native/pal_collation.c +++ b/src/corefx/System.Globalization.Native/pal_collation.c @@ -42,9 +42,8 @@ typedef struct { int32_t key; UCollator* UCollator; } TCollatorMap; struct SortHandle { UCollator* regular; - TCollatorMap* collatorsPerOption; pthread_mutex_t collatorsLockObject; - void* pRoot; + void* collatorsPerOptionRoot; }; typedef struct { UChar* items; size_t capacity; size_t size; } UCharList; @@ -372,7 +371,7 @@ void CreateSortHandle(SortHandle** ppSortHandle) return; } - (*ppSortHandle)->pRoot = NULL; + (*ppSortHandle)->collatorsPerOptionRoot = NULL; int result = pthread_mutex_init(&(*ppSortHandle)->collatorsLockObject, NULL); if (result != 0) @@ -410,10 +409,10 @@ void GlobalizationNative_CloseSortHandle(SortHandle* pSortHandle) ucol_close(pSortHandle->regular); pSortHandle->regular = NULL; - while (pSortHandle->pRoot != NULL) + while (pSortHandle->collatorsPerOptionRoot != NULL) { - TCollatorMap* data = *(TCollatorMap **)pSortHandle->pRoot; - tdelete(data, &pSortHandle->pRoot, TreeComparer); + TCollatorMap* data = *(TCollatorMap **)pSortHandle->collatorsPerOptionRoot; + tdelete(data, &pSortHandle->collatorsPerOptionRoot, TreeComparer); ucol_close(data->UCollator); free(data); } @@ -440,12 +439,11 @@ const UCollator* GetCollatorFromSortHandle(SortHandle* pSortHandle, int32_t opti TCollatorMap* map = (TCollatorMap*)malloc(sizeof(TCollatorMap)); map->key = options; - void* entry = tfind(map, &pSortHandle->pRoot, TreeComparer); - if (entry == NULL) + void* entry = tsearch(map, &pSortHandle->collatorsPerOptionRoot, TreeComparer); + if ((*(TCollatorMap**)entry) == map) { pCollator = CloneCollatorWithOptions(pSortHandle->regular, options, pErr); map->UCollator = pCollator; - tsearch(map, &pSortHandle->pRoot, TreeComparer); } else { |