You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/07/29 21:32:06 UTC

[11/31] git commit: fix memory leak where peeked-locations are kept by their parents

fix memory leak where peeked-locations are kept by their parents


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/2ecb9687
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/2ecb9687
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/2ecb9687

Branch: refs/heads/master
Commit: 2ecb9687df779864b1bdd51ddc003baed2d8b98e
Parents: 3411881
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Jul 23 13:06:25 2014 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jul 29 10:42:07 2014 -0400

----------------------------------------------------------------------
 .../main/java/brooklyn/location/basic/AbstractLocation.java   | 2 +-
 .../location/basic/FixedListMachineProvisioningLocation.java  | 2 +-
 .../brooklyn/management/internal/LocalLocationManager.java    | 7 +++++++
 3 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ecb9687/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index d468622..eb46be7 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -528,7 +528,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
         child.setParent(this);
     }
     
-    protected boolean removeChild(Location child) {
+    public boolean removeChild(Location child) {
         boolean removed;
         synchronized (children) {
             removed = children.remove(child);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ecb9687/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
index 523eb6d..242319b 100644
--- a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
@@ -184,7 +184,7 @@ implements MachineProvisioningLocation<T>, Closeable {
     }
 
     @Override
-    protected boolean removeChild(Location child) {
+    public boolean removeChild(Location child) {
         if (inUse.contains(child)) {
             throw new IllegalStateException("Child location "+child+" is in use; cannot remove from "+this);
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2ecb9687/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java b/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
index 3038257..8ce4dbe 100644
--- a/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
+++ b/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
@@ -88,6 +88,13 @@ public class LocalLocationManager implements LocationManager {
             T loc = locationFactory.createLocation(spec);
             if (!createUnmanaged) {
                 manage(loc);
+            } else {
+                // remove references
+                Location parent = loc.getParent();
+                if (parent!=null) {
+                    ((AbstractLocation)parent).removeChild(loc);
+                }
+                preRegisteredLocationsById.remove(loc.getId());
             }
             
             return loc;