Alexander Wels has uploaded a new change for review.

Change subject: userportal: memory leak in extended resources
......................................................................

userportal: memory leak in extended resources

- Fixed memory leak in VmTable, it was holding onto
references to the Vm entities when clearing the Tree.
- Fixed memory leak in AbstractUiCommonModelEditorDriver adding
a visitor on each refresh.

Change-Id: Ie6a6fff003ae1315291de2add063047c14803e75
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=913142
Signed-off-by: Alexander Wels <aw...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/AbstractUiCommonModelEditorDriver.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTable.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTreeItem.java
3 files changed, 31 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/13349/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/AbstractUiCommonModelEditorDriver.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/AbstractUiCommonModelEditorDriver.java
index 97f454b..87f542f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/AbstractUiCommonModelEditorDriver.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/AbstractUiCommonModelEditorDriver.java
@@ -10,6 +10,7 @@
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
 import com.google.gwt.editor.client.Editor;
+import com.google.gwt.editor.client.EditorVisitor;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
 import com.google.gwt.editor.client.impl.BaseEditorDriver;
 
@@ -25,6 +26,7 @@
         extends BaseEditorDriver<T, E> implements SimpleBeanEditorDriver<T, E> 
{
 
     private IEventListener propertyChangeListener = null;
+    private EditorVisitor visitor = null;
 
     /**
      * {@inheritDoc} <BR>
@@ -52,7 +54,10 @@
         object.getPropertyChangedEvent().addListener(propertyChangeListener);
 
         // Visit editors
-        accept(new UiCommonEditorVisitor<T>(getEventMap(), getOwnerModels()));
+        if (visitor == null) {
+            visitor = new UiCommonEditorVisitor<T>(getEventMap(), 
getOwnerModels());
+            accept(visitor);
+        }
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTable.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTable.java
index 0b8c335..adeb16c 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTable.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTable.java
@@ -105,6 +105,7 @@
             closeHandler.removeHandler();
         }
 
+        clearTreeItems();
         vmTree.clear();
 
         for (VM vm : (Iterable<VM>) model.getItems()) {
@@ -122,6 +123,23 @@
         listenOnSelectionChange();
     }
 
+    private void clearTreeItems() {
+        int nodeCount = vmTree.getItemCount();
+        for (int i = 0; i < nodeCount; i++) {
+            clearTreeItems(vmTree.getItem(i));
+        }
+    }
+
+    private void clearTreeItems(TreeItem node) {
+        int nodeCount = node.getChildCount();
+        for (int i = 0; i < nodeCount; i++) {
+            clearTreeItems((VmTreeItem) node.getChild(i));
+        }
+        if (node instanceof VmTreeItem) {
+            ((VmTreeItem) node).reset();
+        }
+    }
+
     @Override
     public ResourcesModel flush() {
         return modelProvider.getModel();
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTreeItem.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTreeItem.java
index bd040f1..4fee7c6 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTreeItem.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/resources/VmTreeItem.java
@@ -12,9 +12,9 @@
  * A tree item which is bound to VM and can set up it's state according to the 
provided list of selected VMs
  */
 public class VmTreeItem extends TreeItem {
-    private final Guid id;
+    private Guid id;
 
-    private final VM vm;
+    private VM vm;
 
     public VmTreeItem(Widget widget, VM vm) {
         super(widget);
@@ -51,4 +51,9 @@
 
         return id.equals(other.getId());
     }
+
+    public void reset() {
+        this.vm = null;
+        this.id = null;
+    }
 }


--
To view, visit http://gerrit.ovirt.org/13349
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie6a6fff003ae1315291de2add063047c14803e75
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <aw...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to