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