aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>1999-10-18 22:57:07 +0000
committerTom Tromey <tromey@gcc.gnu.org>1999-10-18 22:57:07 +0000
commit4b84737d47b7e97e11d85c13bdeb861c896a5a6a (patch)
tree5e0312d5dc7025957805d8741fe055e5009fc512
parent35c95c5a65c1732ad9b0702656a5081e954cf967 (diff)
downloadgcc-4b84737d47b7e97e11d85c13bdeb861c896a5a6a.zip
gcc-4b84737d47b7e97e11d85c13bdeb861c896a5a6a.tar.gz
gcc-4b84737d47b7e97e11d85c13bdeb861c896a5a6a.tar.bz2
VMClassLoader.java (getVMClassLoader): New method.
* gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): New method. (redirect): New static field. * java/lang/ClassLoader.java (getSystemClassLoader): Now native (getVMClassLoader0): Removed. * java/lang/natClassLoader.cc (getVMClassLoader0): Removed. (redirect): Removed. (getSystemClassLoader): Implemented. From-SVN: r30075
-rw-r--r--libjava/ChangeLog12
-rw-r--r--libjava/gnu/gcj/runtime/VMClassLoader.java11
-rw-r--r--libjava/java/lang/ClassLoader.java8
-rw-r--r--libjava/java/lang/natClassLoader.cc13
4 files changed, 30 insertions, 14 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 0e6761c..cff9145 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,15 @@
+1999-10-18 Tom Tromey <tromey@cygnus.com>
+
+ * gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): New
+ method.
+ (redirect): New static field.
+ * java/lang/ClassLoader.java (getSystemClassLoader): Now
+ native
+ (getVMClassLoader0): Removed.
+ * java/lang/natClassLoader.cc (getVMClassLoader0): Removed.
+ (redirect): Removed.
+ (getSystemClassLoader): Implemented.
+
1999-10-16 Anthony Green <green@cygnus.com>
* java/lang/ClassLoader.java (getSystemResource): Use
diff --git a/libjava/gnu/gcj/runtime/VMClassLoader.java b/libjava/gnu/gcj/runtime/VMClassLoader.java
index bfdb3627..cbd5012 100644
--- a/libjava/gnu/gcj/runtime/VMClassLoader.java
+++ b/libjava/gnu/gcj/runtime/VMClassLoader.java
@@ -59,4 +59,15 @@ final class VMClassLoader extends java.net.URLClassLoader
*/
protected final native Class findSystemClass(String name)
throws java.lang.ClassNotFoundException, java.lang.LinkageError;
+
+ // Return the sole VMClassLoader.
+ private static synchronized VMClassLoader getVMClassLoader ()
+ {
+ if (redirect == null)
+ redirect = new VMClassLoader ();
+ return redirect;
+ }
+
+ // The only VMClassLoader that can exist.
+ private static VMClassLoader redirect;
}
diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java
index f04868d..dab546e 100644
--- a/libjava/java/lang/ClassLoader.java
+++ b/libjava/java/lang/ClassLoader.java
@@ -34,13 +34,7 @@ public abstract class ClassLoader {
return parent;
}
- private static native ClassLoader getVMClassLoader0 ();
-
- static public ClassLoader getSystemClassLoader () {
- if (system == null)
- system = getVMClassLoader0 ();
- return system;
- }
+ public static native ClassLoader getSystemClassLoader ();
/**
* Creates a <code>ClassLoader</code> with no parent.
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index af4a4fa..ee5f2e7 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -48,14 +48,13 @@ extern java::lang::Class ClassLoaderClass;
/////////// java.lang.ClassLoader native methods ////////////
-static gnu::gcj::runtime::VMClassLoader *redirect = 0;
-
-java::lang::ClassLoader*
-java::lang::ClassLoader::getVMClassLoader0 ()
+java::lang::ClassLoader *
+java::lang::ClassLoader::getSystemClassLoader (void)
{
- if (redirect == 0)
- redirect = new gnu::gcj::runtime::VMClassLoader;
- return redirect;
+ JvSynchronize sync (&ClassLoaderClass);
+ if (! system)
+ system = gnu::gcj::runtime::VMClassLoader::getVMClassLoader ();
+ return system;
}
void