[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