libbluray | branch: master | tourettes <[email protected]> | Wed Jun 11 22:07:12 2014 +0300| [9f660050ec4a60bd989aadcd63e70961dcb8ab9a] | committer: hpi1
BDFontMetrics: Release libfreetype2 resources on lib shutdown > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=9f660050ec4a60bd989aadcd63e70961dcb8ab9a --- src/libbluray/bdj/java/java/awt/BDFontMetrics.java | 41 +++++++++----------- src/libbluray/bdj/java/org/videolan/Libbluray.java | 1 + 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/libbluray/bdj/java/java/awt/BDFontMetrics.java b/src/libbluray/bdj/java/java/awt/BDFontMetrics.java index 54f6c48..d0b63a9 100644 --- a/src/libbluray/bdj/java/java/awt/BDFontMetrics.java +++ b/src/libbluray/bdj/java/java/awt/BDFontMetrics.java @@ -32,7 +32,7 @@ public class BDFontMetrics extends FontMetrics { private static native long initN(); private static native void destroyN(long ftLib); - public static void init() { + public synchronized static void init() { //System.loadLibrary("bluray"); if (ftLib != 0) @@ -45,24 +45,6 @@ public class BDFontMetrics extends FontMetrics { throw new AWTError("freetype lib not loaded"); } - Runtime.getRuntime().addShutdownHook( - new Thread() { - public void run() { - Iterator it = fontMetricsMap.values().iterator(); - while (it.hasNext()) { - try { - BDFontMetrics fm = (BDFontMetrics)it.next(); - it.remove(); - fm.destroy(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - BDFontMetrics.destroyN(BDFontMetrics.ftLib); - } - } - ); - String javaHome = (String) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return System.getProperty("java.home"); @@ -99,6 +81,21 @@ public class BDFontMetrics extends FontMetrics { fontNameMap.put("default.3", dir + "LucidaSansDemiOblique.ttf"); } + public synchronized static void shutdown() { + Iterator it = fontMetricsMap.values().iterator(); + while (it.hasNext()) { + try { + BDFontMetrics fm = (BDFontMetrics)it.next(); + it.remove(); + fm.destroy(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + destroyN(BDFontMetrics.ftLib); + ftLib = 0; + } + /** A map which maps a native font name and size to a font metrics object. This is used as a cache to prevent loading the same fonts multiple times. */ private static Map fontMetricsMap = new HashMap(); @@ -124,7 +121,7 @@ public class BDFontMetrics extends FontMetrics { return fm; } - static String[] getFontList() { + static synchronized String[] getFontList() { init(); ArrayList fontNames = new ArrayList(); @@ -151,13 +148,13 @@ public class BDFontMetrics extends FontMetrics { } } - public static boolean registerFont(File f) { + public synchronized static boolean registerFont(File f) { //TODO org.videolan.Logger.unimplemented("BDFontMetrics", "registerFont"); return false; } - public static void unregisterFont(String name, int style) { + public synchronized static void unregisterFont(String name, int style) { name = name.toLowerCase() + "." + style; fontNameMap.remove(name); } diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index 0a15577..183d5d5 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -136,6 +136,7 @@ public class Libbluray { MountManager.unmountAll(); GUIManager.shutdown(); BDToolkit.shutdownDisc(); + java.awt.BDFontMetrics.shutdown(); SIManagerImpl.shutdown(); IxcRegistry.shutdown(); EventManager.shutdown(); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
