[jboss-cvs] JBossAS SVN: r59090 - branches/Branch_4_0/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:28:21 EST 2006


Author: kabir.khan at jboss.com
Date: 2006-12-18 16:28:19 -0500 (Mon, 18 Dec 2006)
New Revision: 59090

Modified:
   branches/Branch_4_0/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: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-12-18 18:43:26 UTC (rev 59089)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-12-18 21:28:19 UTC (rev 59090)
@@ -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)
    {
@@ -171,11 +172,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