Patch: synchronize in ClassLoader

Tom Tromey tromey@cygnus.com
Mon Oct 18 15:55:00 GMT 1999


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


More information about the Java-patches mailing list