[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