[jboss-cvs] JBossAS SVN: r70387 - in projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop: instrument and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 4 18:17:45 EST 2008
Author: flavia.rainone at jboss.com
Date: 2008-03-04 18:17:45 -0500 (Tue, 04 Mar 2008)
New Revision: 70387
Modified:
projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
Log:
[JBAOP-499] Temporary workaround to a specific deadlock scenario. This fix still requires further validation.
Modified: projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
===================================================================
--- projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java 2008-03-04 23:02:29 UTC (rev 70386)
+++ projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java 2008-03-04 23:17:45 UTC (rev 70387)
@@ -39,6 +39,7 @@
import org.jboss.aop.advice.AdviceType;
import org.jboss.aop.advice.InvalidAdviceException;
import org.jboss.aop.advice.NoMatchingAdviceException;
+import org.jboss.aop.advice.AdviceMethodProperties.OptionalParameters;
import org.jboss.aop.advice.annotation.assignability.DegreeAlgorithm;
import org.jboss.aop.util.ReflectUtils;
@@ -583,6 +584,8 @@
{
StringBuffer buffer = new StringBuffer();
buffer.append(ParameterAnnotationRule.class.getName());
+ buffer.append(OptionalParameters.class.getName());
+ buffer.append(DegreeAlgorithm.class.getName());
return buffer.toString();
}
}
\ No newline at end of file
Modified: projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2008-03-04 23:02:29 UTC (rev 70386)
+++ projects/aop/branches/deadlocks/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java 2008-03-04 23:17:45 UTC (rev 70387)
@@ -43,6 +43,7 @@
import javassist.CtNewMethod;
import javassist.Modifier;
import javassist.NotFoundException;
+import javassist.compiler.CodeGen;
import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
@@ -67,7 +68,6 @@
import org.jboss.aop.util.ReflectUtils;
import org.jboss.aop.util.logging.AOPLogger;
import org.jboss.logging.Logger;
-import org.jboss.util.loading.Translatable;
/**
* Creates the Joinpoint invocation replacement classes used with Generated advisors
@@ -985,11 +985,12 @@
StringBuffer body = new StringBuffer();
body.append("{");
body.append(" try{");
- body.append(" switch(++" + CURRENT_ADVICE + "){");
+ // IMPORTANT don't replace if blocks by a switch statement because
+ // the code in javassist that compilese the switch statement loads classes
+ // that are not prevented in the deadlock treatment, thus causing deadlock
+ body.append(" ++").append(CURRENT_ADVICE).append(";");
AroundAdviceCallStrategy.getInstance().addInvokeCode(this, aroundSetups, body, info);
- body.append(" default:");
body.append(" " + returnStr + "this.dispatch();");
- body.append(" }");
body.append(" }finally{");
body.append(" --" + CURRENT_ADVICE + ";");
body.append(" }");
@@ -1868,9 +1869,9 @@
return false;
}
- beforeCall.append(" case ");
- beforeCall.append(++addedAdvice);
- beforeCall.append(":");
+ beforeCall.append(" if (").append(CURRENT_ADVICE);
+ beforeCall.append(" == ").append(++addedAdvice);
+ beforeCall.append("){");
if (setup.getCFlowString() != null)
{
@@ -1890,7 +1891,7 @@
result = appendAroundCallString(beforeCall, call, key, setup, properties, generator);
}
- call.append(" break;");
+ call.append("}");
return result;
}
@@ -2241,6 +2242,8 @@
buffer.append(AdviceMethodProperties.class.getName());
buffer.append(AdviceMethodProperties.OptionalParameters.class.getName());
buffer.append(ReflectUtils.class.getName());
+ buffer.append(CodeGen.class.getName());
+ buffer.append(CannotCompileException.class.getName());
buffer.append(AdviceMethodFactory.loadEverything());
try
{
More information about the jboss-cvs-commits
mailing list