From d8e2d1639f11624439f580c93c6359b485ecb801 Mon Sep 17 00:00:00 2001 From: prrace Date: Thu, 17 Jul 2025 14:29:40 -0700 Subject: [PATCH] 8362557 --- .../macosx/classes/sun/font/CFont.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/java.desktop/macosx/classes/sun/font/CFont.java b/src/java.desktop/macosx/classes/sun/font/CFont.java index fbc6afca84f7d..f187c5bb14c3c 100644 --- a/src/java.desktop/macosx/classes/sun/font/CFont.java +++ b/src/java.desktop/macosx/classes/sun/font/CFont.java @@ -32,6 +32,8 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; +import sun.java2d.Disposer; +import sun.java2d.DisposerRecord; // Right now this class is final to avoid a problem with native code. // For some reason the JNI IsInstanceOf was not working correctly @@ -98,6 +100,7 @@ private static native long createNativeFont(final String nativeFontName, private boolean isFakeItalic; private String nativeFontName; private long nativeFontPtr; + private final Object disposerReferent = new Object(); private native float getWidthNative(final long nativeFontPtr); private native float getWeightNative(final long nativeFontPtr); @@ -194,6 +197,7 @@ public CFont createItalicVariant() { protected synchronized long getNativeFontPtr() { if (nativeFontPtr == 0L) { nativeFontPtr = createNativeFont(nativeFontName, style); + Disposer.addRecord(disposerReferent, new CFontDisposerRecord(nativeFontPtr)); } return nativeFontPtr; } @@ -256,13 +260,17 @@ public CompositeFont getCompositeFont2D() { return compFont; } - @Override - @SuppressWarnings("removal") - protected synchronized void finalize() { - if (nativeFontPtr != 0) { + private static class CFontDisposerRecord implements DisposerRecord { + + private final long nativeFontPtr; + + CFontDisposerRecord(long ptr) { + nativeFontPtr = ptr; + } + + public void dispose() { disposeNativeFont(nativeFontPtr); } - nativeFontPtr = 0; } @Override