`CLDRTimeZoneNameProviderImpl.getDisplayNameArray()` modifies the array cached by `LocaleResources` when filling in missing time zone names. As a result, names derived for a parent locale can be reused by a later lookup for a child locale, making the result depend on lookup order.
This change copies the array before updating the zone ID and deriving fallback names, leaving the cached array unchanged. `TimeZoneNameOrderTest` compares a direct lookup with a lookup made after querying the parent locale. The two runs use separate JVMs so that they do not share cached state. `TimeZoneNameConcurrencyTest` compares concurrent first lookups with sequential lookups in a fresh JVM. It is included to cover the race seen in 11u/17u/21u; it passes on mainline both before and after the fix. Tested with jtreg sun/util, java/util/TimeZone and java/util/Locale on linux-x64. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - 8392223: CLDR provider mutates shared cached time zone name arrays Changes: https://git.openjdk.org/jdk/pull/32867/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32867&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8392223 Stats: 203 lines in 3 files changed: 202 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jdk/pull/32867.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/32867/head:pull/32867 PR: https://git.openjdk.org/jdk/pull/32867
