From 758bfdd5aeb063c0968924e62dc69ac628771c28 Mon Sep 17 00:00:00 2001 From: Andrey Turbanov Date: Sat, 27 Feb 2021 21:33:19 +0300 Subject: [PATCH 1/2] [PATCH] Thread-safe initialization of SunFontManager.platformFontMap --- .../share/classes/sun/font/SunFontManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/java.desktop/share/classes/sun/font/SunFontManager.java b/src/java.desktop/share/classes/sun/font/SunFontManager.java index 40bc03439c7da..ab5a30dc6bca6 100644 --- a/src/java.desktop/share/classes/sun/font/SunFontManager.java +++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java @@ -1433,6 +1433,7 @@ public static class FamilyDescription { public String boldFileName; public String italicFileName; public String boldItalicFileName; + boolean failed; } static HashMap platformFontMap; @@ -1445,8 +1446,10 @@ public HashMap populateHardcodedFileNameMap() { } Font2D findFontFromPlatformMap(String lcName, int style) { + HashMap platformFontMap = SunFontManager.platformFontMap; if (platformFontMap == null) { platformFontMap = populateHardcodedFileNameMap(); + SunFontManager.platformFontMap = platformFontMap; } if (platformFontMap == null || platformFontMap.size() == 0) { @@ -1460,7 +1463,7 @@ Font2D findFontFromPlatformMap(String lcName, int style) { } FamilyDescription fd = platformFontMap.get(firstWord); - if (fd == null) { + if (fd == null || fd.failed) { return null; } /* Once we've established that its at least the first word, @@ -1527,7 +1530,7 @@ Font2D findFontFromPlatformMap(String lcName, int style) { if (FontUtilities.isLogging()) { FontUtilities.logInfo("Hardcoded file missing looking for " + lcName); } - platformFontMap.remove(firstWord); + fd.failed = true; return null; } @@ -1554,7 +1557,7 @@ public Boolean run() { if (FontUtilities.isLogging()) { FontUtilities.logInfo("Hardcoded file missing looking for " + lcName); } - platformFontMap.remove(firstWord); + fd.failed = true; return null; } From f1911b4e2a1dedee7785dd1c5bb4d15d76381636 Mon Sep 17 00:00:00 2001 From: Andrey Turbanov Date: Sun, 28 Feb 2021 11:34:28 +0300 Subject: [PATCH 2/2] [PATCH] Thread-safe initialization of SunFontManager.platformFontMap --- src/java.desktop/share/classes/sun/font/SunFontManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.desktop/share/classes/sun/font/SunFontManager.java b/src/java.desktop/share/classes/sun/font/SunFontManager.java index ab5a30dc6bca6..3b91ba2fdd660 100644 --- a/src/java.desktop/share/classes/sun/font/SunFontManager.java +++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java @@ -1436,7 +1436,7 @@ public static class FamilyDescription { boolean failed; } - static HashMap platformFontMap; + static volatile HashMap platformFontMap; /** * default implementation does nothing.