[jboss-cvs] JBossAS SVN: r93150 - in projects/jboss-cl/branches/Branch_2_0/classloader/src: main/java/org/jboss/classloader/spi/base and 3 other directories.

David M. Lloyd david.lloyd at redhat.com
Thu Sep 3 10:52:16 EDT 2009


On 09/03/2009 03:13 AM, jboss-cvs-commits at lists.jboss.org wrote:
> Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
> ===================================================================
> --- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-09-03 06:38:46 UTC (rev 93149)
> +++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-09-03 08:13:57 UTC (rev 93150)
> @@ -436,6 +436,9 @@
>  
>        synchronized (this)
>        {
> +         // JBCL-114: did we lose the race to the synchronized?
> +         result = isLoadedClass(name, trace);
> +         
>           // Not already loaded use the domain
>           if (result == null)
>              result = loadClassFromDomain(name, trace);

Does this actually happen?

> +   @Override
> +   protected Class<?> loadClass(BaseClassLoader classLoader, String name, boolean allExports) throws ClassNotFoundException
> +   {
> +      try
> +      {
> +         waitForIt();
> +      }
> +      catch(InterruptedException e)
> +      {
> +         throw new ClassNotFoundException("interrupted", e);
> +      }
> +      // there can be only 1
> +      boolean locked = lock.tryLock();
> +      if(!locked)
> +         throw new IllegalStateException("only one thread is allowed to use this class loader domain");
> +      return super.loadClass(classLoader, name, allExports);
> +   }

Why use a lock to do this?  If only one thread can use it why not just keep 
a reference to the Thread and compare against Thread.currentThread()?  It'd 
be much faster, and use less memory besides.

- DML



More information about the jboss-cvs-commits mailing list