[jboss-cvs] JBossAS SVN: r59092 - trunk/aspects/src/main/org/jboss/aop/deployment

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Dec 18 16:29:08 EST 2006


Author: kabir.khan at jboss.com
Date: 2006-12-18 16:29:07 -0500 (Mon, 18 Dec 2006)
New Revision: 59092

Modified:
   trunk/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java
Log:
[JBAOP-330] Infinite loop in ScopedJBossClassPool/ClassPool if a class cannot be found in the discovered pool. Add a threadlocal to make sure that we don't recurse infinitely

Modified: trunk/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-12-18 21:28:54 UTC (rev 59091)
+++ trunk/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-12-18 21:29:07 UTC (rev 59092)
@@ -51,6 +51,7 @@
    
    WeakReference repository = null;
    UrlInfo urlInfo;
+   ThreadLocal lastPool = new ThreadLocal();
 
    protected ScopedJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
    {
@@ -79,16 +80,7 @@
 
    private HeirarchicalLoaderRepository3 getRepository()
    {
-      //FIXME - Once Javassist > 3.3.0 is out use getClassLoader0() and get rid of try/catch
-      ClassLoader cl = null;
-      try
-      {
-         cl =  getClassLoader();
-      }
-      catch (RuntimeException e)
-      {
-         //Ignore, the ScopedClassPoll throws an exception if pool is not associated with a cl
-      }
+      ClassLoader cl = getClassLoader0();
       if (cl != null)
       {
          return (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
@@ -171,11 +163,24 @@
       try
       {
          ClassPool pool = getCorrectPoolForResource(url);
-         return pool.get(classname);
+         if (pool != lastPool.get())
+         {
+            lastPool.set(pool);
+            return pool.get(classname);
+         }
       }
       catch (NotFoundException e)
       {
       }
+      catch(StackOverflowError e)
+      {
+         throw e;
+      }
+      finally
+      {
+         lastPool.set(null);
+      }
+
       return null;
    }
 




More information about the jboss-cvs-commits mailing list