Entity.getSubscriptionTracker synchronization
Avoid calling getSubscriptionContext() while holding lock on
AbstractEntity.this. See discussion in https://github.com/apache/brooklyn-server/pull/96
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
index 09834af..58767e4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
@@ -1492,9 +1492,13 @@
}
protected SubscriptionTracker getSubscriptionTracker() {
+ // TODO Would be nice to simplify concurrent model, and not synchronize on
+ // AbstractEntity.this; perhaps could get rid of lazy-initialisation, but then
+ // would need to first ensure `managementSupport` is definitely initialised.
+ SubscriptionContext subscriptionContext = getSubscriptionContext();
synchronized (AbstractEntity.this) {
if (_subscriptionTracker == null) {
- _subscriptionTracker = new SubscriptionTracker(getSubscriptionContext());
+ _subscriptionTracker = new SubscriptionTracker(subscriptionContext);
}
return _subscriptionTracker;
}