[jboss-cvs] JBossAS SVN: r70775 - projects/aop/trunk/aop/src/main/org/jboss/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 12 11:27:56 EDT 2008


Author: flavia.rainone at jboss.com
Date: 2008-03-12 11:27:55 -0400 (Wed, 12 Mar 2008)
New Revision: 70775

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
Log:
[JBAOP-501] Bug solved: removed advisors manipulation to outside the synchronized block.

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-03-12 15:16:16 UTC (rev 70774)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-03-12 15:27:55 UTC (rev 70775)
@@ -1337,7 +1337,7 @@
    /**
     * Remove an interceptor pointcut with a given name
     */
-   public synchronized void removeBinding(String name)
+   public void removeBinding(String name)
    {
       AdviceBinding binding = internalRemoveBinding(name);
       if (binding != null)
@@ -1405,26 +1405,30 @@
    /**
     * Add an interceptor pointcut with a given name
     */
-   public synchronized void addBinding(AdviceBinding binding)
+   public void addBinding(AdviceBinding binding)
    {
-      AdviceBinding removedBinding = internalRemoveBinding(binding.getName());
-      Set<Advisor> affectedAdvisors = removedBinding == null ? null : new HashSet<Advisor>(removedBinding.getAdvisors());
-      initBindingsMap();
-      synchronized (bindings)
+      Set<Advisor> affectedAdvisors = null;
+      AdviceBinding removedBinding = null;
+      synchronized(this)
       {
-         bindings.put(binding.getName(), binding);
-      }
+         removedBinding = internalRemoveBinding(binding.getName());
+         affectedAdvisors = removedBinding == null ? null : new HashSet<Advisor>(removedBinding.getAdvisors());
+         initBindingsMap();
+         synchronized (bindings)
+         {
+            bindings.put(binding.getName(), binding);
+         }
 
-      initPointcutsMap();
-      initPointcutInfosMap();
-      synchronized (pointcuts)
-      {
-         Pointcut pointcut = binding.getPointcut();
-         pointcuts.put(pointcut.getName(), pointcut);
-         pointcutInfos.put(pointcut.getName(), new PointcutInfo(pointcut, binding, this.transformationStarted));
-         updatePointcutStats(pointcut);
+         initPointcutsMap();
+         initPointcutInfosMap();
+         synchronized (pointcuts)
+         {
+            Pointcut pointcut = binding.getPointcut();
+            pointcuts.put(pointcut.getName(), pointcut);
+            pointcutInfos.put(pointcut.getName(), new PointcutInfo(pointcut, binding, this.transformationStarted));
+            updatePointcutStats(pointcut);
+         }
       }
-
       synchronized (advisors)
       {
          updateAdvisorsForAddedBinding(binding);
@@ -2022,7 +2026,7 @@
     * Removes an AdviceBinding without notifying dynamic aop strategy.
     * @param name the binding to be removed.
     */
-   private AdviceBinding internalRemoveBinding(String name)
+   private synchronized AdviceBinding internalRemoveBinding(String name)
    {
       synchronized (bindings)
       {




More information about the jboss-cvs-commits mailing list