On Sun, 28 Feb 2021 03:50:13 GMT, liach <github.com+7806504+li...@openjdk.org> wrote:
>> src/java.desktop/share/classes/sun/font/SunFontManager.java line 1452: >> >>> 1450: if (platformFontMap == null) { >>> 1451: platformFontMap = populateHardcodedFileNameMap(); >>> 1452: SunFontManager.platformFontMap = platformFontMap; >> >> I am not sure it is enough for "thread-safe initialization". The >> "platformFontMap" might not be null, but its content can be >> broken/incomplete at this point. > > https://github.com/openjdk/jdk/pull/2691#issuecomment-784367127 > > In short, previously platformFontMap references were field set/gets and may > be inconsistent due to concurrency. It is now moved to a local variable; also > the map modifications have been moved to fields to avoid concurrency issues > with hash map as far as I can see. One thread may create the local platformFontMap, then set the static SunFontManager.platformFontMap field, and then initialize the platformFontMap or mix these operations. The second thread may see non-null SunFontManager.platformFontMap which is not still initialized. ------------- PR: https://git.openjdk.java.net/jdk/pull/2762