[jboss-cvs] JBossAS SVN: r101823 - projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 4 08:43:33 EST 2010


Author: adrian at jboss.org
Date: 2010-03-04 08:43:33 -0500 (Thu, 04 Mar 2010)
New Revision: 101823

Modified:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
Log:
[JBKERNEL-104] - Make collection access volatile and avoid inconsistent usage of volatile variables

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java	2010-03-04 13:42:54 UTC (rev 101822)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyInfo.java	2010-03-04 13:43:33 UTC (rev 101823)
@@ -49,28 +49,28 @@
 public class AbstractDependencyInfo extends JBossObject implements TrackingDependencyInfo
 {
    /** My dependencies */
-   private Set<DependencyItem> iDependOn;
+   private volatile Set<DependencyItem> iDependOn;
 
    /** Dependencies referencing me */
-   private Set<DependencyItem> dependsOnMe;
+   private volatile Set<DependencyItem> dependsOnMe;
 
    /** Install callbacks */
-   private Set<CallbackItem<?>> installCallbacks;
+   private volatile Set<CallbackItem<?>> installCallbacks;
 
    /** Uninstall callbacks */
-   private Set<CallbackItem<?>> uninstallCallbacks;
+   private volatile Set<CallbackItem<?>> uninstallCallbacks;
    
    /** Lifecycle callbacks */
-   private List<LifecycleCallbackItem> lifecycleCallbacks;
+   private volatile List<LifecycleCallbackItem> lifecycleCallbacks;
    
    /** Whether this is an autowire candidate */
-   private boolean autowireCandidate = true;
+   private volatile boolean autowireCandidate = true;
    
    /** Whether we are tracking */
-   boolean tracking = true;
+   volatile boolean tracking = true;
    
    /** The unresolved dependencies by state */
-   private Map<ControllerState, Set<DependencyItem>> unresolved;
+   private volatile Map<ControllerState, Set<DependencyItem>> unresolved;
 
    /**
     * Create an abstract dependency info
@@ -84,6 +84,7 @@
       if (tracking)
       {
          ControllerState whenRequired = item.getWhenRequired();
+         Map<ControllerState, Set<DependencyItem>> unresolved = this.unresolved;
          if (unresolved != null)
          {
             Set<DependencyItem> items = unresolved.get(whenRequired);
@@ -98,8 +99,12 @@
       if (tracking)
       {
          ControllerState whenRequired = item.getWhenRequired();
+         Map<ControllerState, Set<DependencyItem>> unresolved = this.unresolved;
          if (unresolved == null)
-            unresolved = new ConcurrentHashMap<ControllerState, Set<DependencyItem>>();
+         {
+            this.unresolved = new ConcurrentHashMap<ControllerState, Set<DependencyItem>>();
+            unresolved = this.unresolved;
+         }
          Set<DependencyItem> items = unresolved.get(whenRequired);
          if (items == null)
          {
@@ -131,8 +136,12 @@
    
    public void addIDependOn(DependencyItem dependency)
    {
+      Set<DependencyItem> iDependOn = this.iDependOn;
       if (iDependOn == null)
-         iDependOn = new CopyOnWriteArraySet<DependencyItem>();
+      {
+         this.iDependOn = new CopyOnWriteArraySet<DependencyItem>();
+         iDependOn = this.iDependOn;
+      }
       iDependOn.add(dependency);
       flushJBossObjectCache();
       if (dependency instanceof TrackingDependencyItem)
@@ -143,8 +152,12 @@
             if (dependency.isResolved() == false)
             {
                ControllerState whenRequired = dependency.getWhenRequired();
+               Map<ControllerState, Set<DependencyItem>> unresolved = this.unresolved;
                if (unresolved == null)
-                  unresolved = new ConcurrentHashMap<ControllerState, Set<DependencyItem>>();
+               {
+                  this.unresolved = new ConcurrentHashMap<ControllerState, Set<DependencyItem>>();
+                  unresolved = this.unresolved;
+               }
                Set<DependencyItem> items = unresolved.get(whenRequired);
                if (items == null)
                {
@@ -168,6 +181,7 @@
 
    public void removeIDependOn(DependencyItem dependency)
    {
+      Set<DependencyItem> iDependOn = this.iDependOn;
       if (iDependOn == null)
          return;
       iDependOn.remove(dependency);
@@ -178,6 +192,7 @@
          if (tracking)
          {
             ControllerState whenRequired = dependency.getWhenRequired();
+            Map<ControllerState, Set<DependencyItem>> unresolved = this.unresolved;
             if (unresolved != null)
             {
                Set<DependencyItem> items = unresolved.get(whenRequired);
@@ -210,14 +225,19 @@
    
    public void addDependsOnMe(DependencyItem dependency)
    {
+      Set<DependencyItem> dependsOnMe = this.dependsOnMe;
       if (dependsOnMe == null)
-         dependsOnMe = new CopyOnWriteArraySet<DependencyItem>();
+      {
+         this.dependsOnMe = new CopyOnWriteArraySet<DependencyItem>();
+         dependsOnMe = this.dependsOnMe;
+      }
       dependsOnMe.add(dependency);
       flushJBossObjectCache();
    }
 
    public void removeDependsOnMe(DependencyItem dependency)
    {
+      Set<DependencyItem> dependsOnMe = this.dependsOnMe;
       if (dependsOnMe == null)
          return;
       dependsOnMe.remove(dependency);
@@ -241,6 +261,7 @@
 
    public Set<DependencyItem> getUnresolvedDependencies(ControllerState state)
    {
+      Set<DependencyItem> iDependOn = this.iDependOn;
       if (iDependOn == null || iDependOn.isEmpty())
          return Collections.emptySet();
       
@@ -248,6 +269,7 @@
 
       if (tracking && state != null)
       {
+         Map<ControllerState, Set<DependencyItem>> unresolved = this.unresolved;
          if (unresolved != null)
             result = unresolved.get(state);
          if (result == null)
@@ -274,14 +296,19 @@
 
    public <T> void addInstallItem(CallbackItem<T> callbackItem)
    {
+      Set<CallbackItem<?>> installCallbacks = this.installCallbacks;
       if (installCallbacks == null)
-         installCallbacks = new CopyOnWriteArraySet<CallbackItem<?>>();
+      {
+         this.installCallbacks = new CopyOnWriteArraySet<CallbackItem<?>>();
+         installCallbacks = this.installCallbacks;
+      }
       installCallbacks.add(callbackItem);
       flushJBossObjectCache();
    }
 
    public <T> void removeInstallItem(CallbackItem<T> callbackItem)
    {
+      Set<CallbackItem<?>> installCallbacks = this.installCallbacks;
       if (installCallbacks == null)
          return;
       installCallbacks.remove(callbackItem);
@@ -290,6 +317,7 @@
 
    public Set<CallbackItem<?>> getInstallItems()
    {
+      Set<CallbackItem<?>> installCallbacks = this.installCallbacks;
       if (installCallbacks == null)
          return Collections.emptySet();
       return installCallbacks;
@@ -297,14 +325,19 @@
 
    public <T> void addUninstallItem(CallbackItem<T> callbackItem)
    {
+      Set<CallbackItem<?>> uninstallCallbacks = this.uninstallCallbacks;
       if (uninstallCallbacks == null)
-         uninstallCallbacks = new CopyOnWriteArraySet<CallbackItem<?>>();
+      {
+         this.uninstallCallbacks = new CopyOnWriteArraySet<CallbackItem<?>>();
+         uninstallCallbacks = this.uninstallCallbacks;
+      }
       uninstallCallbacks.add(callbackItem);
       flushJBossObjectCache();
    }
 
    public <T> void removeUninstallItem(CallbackItem<T> callbackItem)
    {
+      Set<CallbackItem<?>> uninstallCallbacks = this.uninstallCallbacks;
       if (uninstallCallbacks == null)
          return;
       uninstallCallbacks.remove(callbackItem);
@@ -313,6 +346,7 @@
 
    public Set<CallbackItem<?>> getUninstallItems()
    {
+      Set<CallbackItem<?>> uninstallCallbacks = this.uninstallCallbacks;
       if (uninstallCallbacks == null)
          return Collections.emptySet();
       return uninstallCallbacks;
@@ -320,13 +354,18 @@
 
    public void addLifecycleCallback(LifecycleCallbackItem lifecycleCallbackItem)
    {
+      List<LifecycleCallbackItem> lifecycleCallbacks = this.lifecycleCallbacks;
       if (lifecycleCallbacks == null)
-         lifecycleCallbacks = new CopyOnWriteArrayList<LifecycleCallbackItem>();
+      {
+         this.lifecycleCallbacks = new CopyOnWriteArrayList<LifecycleCallbackItem>();
+         lifecycleCallbacks = this.lifecycleCallbacks;
+      }
       lifecycleCallbacks.add(lifecycleCallbackItem);
    }
    
    public List<LifecycleCallbackItem> getLifecycleCallbacks()
    {
+      List<LifecycleCallbackItem> lifecycleCallbacks = this.lifecycleCallbacks;
       if (lifecycleCallbacks == null)
          return Collections.emptyList();
       return lifecycleCallbacks;
@@ -344,6 +383,7 @@
 
    public void toString(JBossStringBuilder buffer)
    {
+      Set<DependencyItem> iDependOn = this.iDependOn;
       if (iDependOn != null)
          buffer.append("idependOn=").append(iDependOn);
       try

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java	2010-03-04 13:42:54 UTC (rev 101822)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java	2010-03-04 13:43:33 UTC (rev 101823)
@@ -60,7 +60,7 @@
    private volatile boolean indexedStates; 
    
    /** Whether we are resolved */
-   private boolean resolved;
+   private volatile boolean resolved;
 
    /**
     * Create a new dependency item
@@ -120,7 +120,9 @@
    public boolean resolve(Controller controller)
    {
       indexStates(controller, ControllerState.DESCRIBED, ControllerState.INSTALLED);
+      ControllerState dependentState = getDependentState();
       ControllerState state = dependentState == null ? ControllerState.INSTALLED : dependentState;
+      Object iDependOn = getIDependOn();
       ControllerContext context = controller.getContext(iDependOn, state, true);
       
       if (context == null)
@@ -151,11 +153,13 @@
    {
       buffer.append("name=").append(name);
       buffer.append(" dependsOn=").append(iDependOn);
+      ControllerState whenRequired = getWhenRequired();
       if (whenRequired != null)
          buffer.append(" whenRequired=").append(whenRequired.getStateString());
+      ControllerState dependentState = getDependentState();
       if (dependentState != null)
          buffer.append(" dependentState=").append(dependentState.getStateString());
-      buffer.append(" resolved=").append(resolved);
+      buffer.append(" resolved=").append(isResolved());
    }
    
    public void toShortString(JBossStringBuilder buffer)
@@ -209,6 +213,7 @@
       if (previous != resolved)
       {
          flushJBossObjectCache();
+         TrackingDependencyInfo info = this.info;
          if (info != null)
          {
             if (resolved)




More information about the jboss-cvs-commits mailing list