This is the mail archive of the
java-patches@sourceware.cygnus.com
mailing list for the Java project.
Patch: synchronize in ClassLoader
- To: Java Patch List <java-patches at sourceware dot cygnus dot com>
- Subject: Patch: synchronize in ClassLoader
- From: Tom Tromey <tromey at cygnus dot com>
- Date: 18 Oct 1999 16:56:53 -0600
- Reply-To: tromey at cygnus dot com
I'm committing the appended patch. It cleans up ClassLoader in the
way we discussed earlier today.
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.
Tom
Index: gnu/gcj/runtime/VMClassLoader.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/gnu/gcj/runtime/VMClassLoader.java,v
retrieving revision 1.1
diff -u -r1.1 VMClassLoader.java
--- VMClassLoader.java 1999/08/18 14:16:40 1.1
+++ VMClassLoader.java 1999/10/18 22:51:44
@@ -59,4 +59,15 @@
*/
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;
}
Index: java/lang/ClassLoader.java
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/lang/ClassLoader.java,v
retrieving revision 1.5
diff -u -r1.5 ClassLoader.java
--- ClassLoader.java 1999/10/17 03:11:49 1.5
+++ ClassLoader.java 1999/10/18 22:51:49
@@ -34,13 +34,7 @@
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.
Index: java/lang/natClassLoader.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/lang/natClassLoader.cc,v
retrieving revision 1.10
diff -u -r1.10 natClassLoader.cc
--- natClassLoader.cc 1999/10/17 03:11:49 1.10
+++ natClassLoader.cc 1999/10/18 22:51:52
@@ -48,14 +48,13 @@
/////////// 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