Bugzilla – Attachment 78 Details for
Bug 215
Enhancement for NativeLibLoader
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
Log In
[x]
|
Forgot Password
Login:
[x]
patch for NativeLibLoader against CVS HEAD
libloader.patch (text/plain), 6.49 KB, created by
Sven Gothel
on 2006-04-09 11:32:00 CEST
(
hide
)
Description:
patch for NativeLibLoader against CVS HEAD
Filename:
MIME Type:
Creator:
Sven Gothel
Created:
2006-04-09 11:32:00 CEST
Size:
6.49 KB
patch
obsolete
>Index: NativeLibLoader.java >=================================================================== >RCS file: /cvs/jogl/src/classes/com/sun/opengl/impl/NativeLibLoader.java,v >retrieving revision 1.5 >diff -u -r1.5 NativeLibLoader.java >--- NativeLibLoader.java 16 Feb 2006 02:49:27 -0000 1.5 >+++ NativeLibLoader.java 9 Apr 2006 18:15:11 -0000 >@@ -39,88 +39,118 @@ > > package com.sun.opengl.impl; > >-import java.awt.Toolkit; >-import java.security.*; >+import java.awt.Frame; >+import java.security.AccessController; >+import java.security.PrivilegedAction; >+import java.util.HashSet; > > public class NativeLibLoader { >- private static volatile boolean doLoading = true; >+ public interface LoaderAction { >+ /** >+ * Loads the library specified by libname. Optionally preloads the libraries specified by >+ * preload. The implementation should ignore, if the preload-libraries have already been >+ * loaded. >+ * @param libname the library to load >+ * @param preload the libraries to load before loading the main library >+ * @param doPreload true, iff the preload-libraries should be loaded >+ * @param ignoreError true, iff errors during loading the preload-libraries should be ignored >+ */ >+ void loadLibrary(String libname, String[] preload, >+ boolean doPreload, boolean ignoreError); >+ } >+ >+ private static class DefaultAction implements LoaderAction { >+ public void loadLibrary(String libname, String[] preload, >+ boolean doPreload, boolean ignoreError) { >+ if (doPreload) { >+ for (int i=0; i<preload.length; i++) { >+ try { >+ System.loadLibrary(preload[i]); >+ } >+ catch (UnsatisfiedLinkError e) { >+ if (!ignoreError && e.getMessage().indexOf("already loaded") < 0) { >+ throw e; >+ } >+ } >+ } >+ } >+ >+ System.loadLibrary(libname); >+ } >+ } >+ >+ private static final HashSet loaded = new HashSet(); >+ private static LoaderAction loaderAction = new DefaultAction(); > > public static void disableLoading() { >- doLoading = false; >+ setLoadingAction(null); > } > > public static void enableLoading() { >- doLoading = true; >+ setLoadingAction(new DefaultAction()); >+ } >+ >+ public static synchronized void setLoadingAction(LoaderAction action) { >+ loaderAction = action; > } > >- private static volatile boolean loadedCore = false; >- private static volatile boolean loadedAWTImpl = false; >- private static volatile boolean loadedDRIHack = false; >- >+ private static synchronized void loadLibrary(String libname, String[] preload, >+ boolean doPreload, boolean ignoreError) { >+ if (loaderAction != null && !loaded.contains(libname)) >+ { >+ loaderAction.loadLibrary(libname, preload, doPreload, ignoreError); >+ loaded.add(libname); >+ } >+ } >+ > public static void loadCore() { >- if (doLoading && !loadedCore) { >- synchronized (NativeLibLoader.class) { >- if (!loadedCore) { >- AccessController.doPrivileged(new PrivilegedAction() { >- public Object run() { >- System.loadLibrary("jogl"); >- return null; >- } >- }); >- loadedCore = true; >- } >+ AccessController.doPrivileged(new PrivilegedAction() { >+ public Object run() { >+ loadLibrary("jogl", null, false, false); >+ return null; > } >- } >+ }); > } > > public static void loadAWTImpl() { >- if (doLoading && !loadedAWTImpl) { >- synchronized (NativeLibLoader.class) { >- if (!loadedAWTImpl) { >- AccessController.doPrivileged(new PrivilegedAction() { >- public Object run() { >- boolean isOSX = System.getProperty("os.name").equals("Mac OS X"); >- if (!isOSX) { >- // Must pre-load JAWT on all non-Mac platforms to >- // ensure references from jogl_awt shared object >- // will succeed since JAWT shared object isn't in >- // default library path >- try { >- System.loadLibrary("jawt"); >- } catch (UnsatisfiedLinkError e) { >- // Accessibility technologies load JAWT themselves; safe to continue >- // as long as JAWT is loaded by any loader >- if (e.getMessage().indexOf("already loaded") == -1) { >- throw e; >- } >- } >- } >- System.loadLibrary("jogl_awt"); >- >- return null; >- } >- }); >- loadedAWTImpl = true; >- } >+ AccessController.doPrivileged(new PrivilegedAction() { >+ public Object run() { >+ // Make sure, that awt.dll is loaded before loading jawt.dll. Otherwise >+ // a Dialog with "awt.dll not found" might pop up. >+ // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4481947. >+ Frame.getFrames(); >+ >+ // Must pre-load JAWT on all non-Mac platforms to >+ // ensure references from jogl_awt shared object >+ // will succeed since JAWT shared object isn't in >+ // default library path >+ boolean isOSX = System.getProperty("os.name").equals("Mac OS X"); >+ String[] preload = { "jawt" }; >+ >+ loadLibrary("jogl_awt", preload, !isOSX, false); >+ return null; > } >- } >+ }); > } > > // See DRIHack.java in com/sun/opengl/impl/x11/ for description of > // why this is needed > public static void loadDRIHack() { >- if (doLoading && !loadedDRIHack) { >- synchronized (NativeLibLoader.class) { >- if (!loadedDRIHack) { >- AccessController.doPrivileged(new PrivilegedAction() { >- public Object run() { >- System.loadLibrary("jogl_drihack"); >- return null; >- } >- }); >- loadedDRIHack = true; >- } >+ AccessController.doPrivileged(new PrivilegedAction() { >+ public Object run() { >+ loadLibrary("jogl_drihack", null, false, false); >+ return null; > } >- } >+ }); >+ } >+ >+ public static void loadCGImpl() { >+ AccessController.doPrivileged(new PrivilegedAction() { >+ public Object run() { >+ String[] preload = { "cg", "cgGL" }; >+ loadLibrary("jogl_cg", preload, true, true); >+ return null; >+ } >+ }); > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 215
: 78 |
79