libbluray | branch: master | hpi1 <[email protected]> | Sun Nov 1 19:48:18 2015 +0200| [fef86d1dddf9fe9e5de195398dafc024b52bc6fc] | committer: hpi1
Improve BD-J stack initialization - separate initializations that need to be done only once - handle exceptions in non-fatal initializations > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=fef86d1dddf9fe9e5de195398dafc024b52bc6fc --- src/libbluray/bdj/java/org/videolan/Libbluray.java | 43 ++++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index c9db9a1..f2f6078 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -52,14 +52,7 @@ public class Libbluray { /* hook system properties: make "user.dir" point to current Xlet home directory */ - private static boolean propertiesHooked = false; - private static void hookProperties() { - if (propertiesHooked) { - return; - } - propertiesHooked = true; - java.util.Properties p = new java.util.Properties(System.getProperties()) { public String getProperty(String key) { if (key.equals("user.dir")) { @@ -74,6 +67,35 @@ public class Libbluray { System.setProperties(p); } + private static boolean initOnce = false; + private static void initOnce() { + if (initOnce) { + return; + } + initOnce = true; + + /* hook system properties (provide Xlet-specific user.dir) */ + try { + hookProperties(); + } catch (Throwable t) { + System.err.println("hookProperties() failed: " + t); + } + + /* hook class loading (fix invalid class files) */ + try { + sun.misc.ClassFileTransformer.add(new BDJClassFileTransformer()); + } catch (Throwable t) { + System.err.println("Adding class file transformer failed: " + t); + } + + /* hook sockets (limit network connections) */ + try { + BDJSocketFactory.init(); + } catch (Throwable t) { + System.err.println("Hooking socket factory failed: " + t + "\n" + Logger.dumpStack(t)); + } + } + private static String canonicalize(String path, boolean create) { try { File dir = new File(path); @@ -91,10 +113,7 @@ public class Libbluray { private static void init(long nativePointer, String discID, String discRoot, String persistentRoot, String budaRoot) { - hookProperties(); - - /* hook calss loading */ - sun.misc.ClassFileTransformer.add(new BDJClassFileTransformer()); + initOnce(); /* set up directories */ persistentRoot = canonicalize(persistentRoot, true); @@ -190,8 +209,6 @@ public class Libbluray { System.setProperty("bluray.network.connected", "YES"); - BDJSocketFactory.init(); - try { System.setSecurityManager(new BDJSecurityManager(discRoot, persistentRoot, budaRoot)); } catch (Exception ex) { _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
