[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