Fix thread-safety in NonDeploymentManagementContext Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/9fcdee9e Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/9fcdee9e Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/9fcdee9e
Branch: refs/heads/0.5.0 Commit: 9fcdee9eb93f43ae14cbdf3fac6e2deffbc69c01 Parents: 19938ce Author: Aled Sage <[email protected]> Authored: Wed Apr 17 14:57:25 2013 +0100 Committer: Aled Sage <[email protected]> Committed: Wed Apr 17 14:57:25 2013 +0100 ---------------------------------------------------------------------- .../management/internal/NonDeploymentManagementContext.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9fcdee9e/core/src/main/java/brooklyn/management/internal/NonDeploymentManagementContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/internal/NonDeploymentManagementContext.java b/core/src/main/java/brooklyn/management/internal/NonDeploymentManagementContext.java index 9b915aa..f5fcb03 100644 --- a/core/src/main/java/brooklyn/management/internal/NonDeploymentManagementContext.java +++ b/core/src/main/java/brooklyn/management/internal/NonDeploymentManagementContext.java @@ -1,6 +1,7 @@ package brooklyn.management.internal; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; import java.net.URL; import java.util.Collection; @@ -48,13 +49,13 @@ public class NonDeploymentManagementContext implements ManagementContextInternal } private final AbstractEntity entity; - private NonDeploymentManagementContextMode mode; - private ManagementContextInternal initialManagementContext; + private volatile NonDeploymentManagementContextMode mode; + private volatile ManagementContextInternal initialManagementContext; private final QueueingSubscriptionManager qsm; private final BasicSubscriptionContext subscriptionContext; private final NonDeploymentExecutionContext executionContext; - private NonDeploymentEntityManager entityManager; + private volatile NonDeploymentEntityManager entityManager; public NonDeploymentManagementContext(AbstractEntity entity, NonDeploymentManagementContextMode mode) { this.entity = checkNotNull(entity, "entity"); @@ -66,6 +67,7 @@ public class NonDeploymentManagementContext implements ManagementContextInternal } public void setManagementContext(ManagementContextInternal val) { + checkState(initialManagementContext == null || initialManagementContext == val, "Must not change initialManagementContext from %s to %s", initialManagementContext, val); this.initialManagementContext = checkNotNull(val, "initialManagementContext"); this.entityManager = new NonDeploymentEntityManager(val); } @@ -78,6 +80,7 @@ public class NonDeploymentManagementContext implements ManagementContextInternal public void setMode(NonDeploymentManagementContextMode mode) { this.mode = checkNotNull(mode, "mode"); } + public NonDeploymentManagementContextMode getMode() { return mode; }
