Index: working_vm/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java =================================================================== --- working_vm/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java (revision 631623) +++ working_vm/vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java (working copy) @@ -557,7 +557,7 @@ /** * @com.intel.drl.spec_ref */ - protected synchronized Class loadClass(String name, boolean resolve) + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { checkInitialized(); if (name == null) { @@ -568,7 +568,11 @@ } Class clazz = findLoadedClass(name); + + + if (clazz == null) { + synchronized(this) { if (parentClassLoader == null) { clazz = VMClassRegistry.loadBootstrapClass(name); } else { @@ -595,6 +599,7 @@ throw new ClassNotFoundException(name); } } + } // synchronized } if (resolve) { resolveClass(clazz); @@ -964,7 +969,7 @@ } @Override - protected synchronized Class loadClass(String className, + protected Class loadClass(String className, boolean resolveClass) throws ClassNotFoundException { SecurityManager sm = System.getSecurityManager(); if (sm != null && !checkingPackageAccess) { Index: working_vm/vm/vmcore/src/class_support/classloader.cpp =================================================================== --- working_vm/vm/vmcore/src/class_support/classloader.cpp (revision 631623) +++ working_vm/vm/vmcore/src/class_support/classloader.cpp (working copy) @@ -466,13 +466,23 @@ ClassLoader* ClassLoader::LookupLoader( ManagedObject* loader ) { - LMAutoUnlock aulock(&(ClassLoader::m_tableLock)); if( !loader ) return NULL; ClassLoader *cl = FindByObject( loader ); - if( cl ) + + if( cl ) { return cl; - else - return AddClassLoader( loader ); + } else { + LMAutoUnlock aulock(&(ClassLoader::m_tableLock)); + + cl = FindByObject( loader ); + + if (cl) { + return cl; + } else { + return AddClassLoader( loader ); + } + } + }