From 94f345052ada335c1964a20e45c3541ceedb8cc1 Mon Sep 17 00:00:00 2001 From: drees Date: Sat, 8 Jul 2006 08:33:05 +0000 Subject: [PATCH] Fix memory leak for good. Whenever we close a ROM image, we need to make a call to RomTree.clearToggledPaths. That clears the RomTree.expandedState (RomTree extends JTree) which was holding onto references of RomTreeNodes. Now that the memory leak is fixed, we can remove the other cleanup() function hacks and the explicit call to System.gc(). git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@103 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d --- src/enginuity/ECUEditor.java | 32 ++++++++++++++-------------- src/enginuity/maps/Rom.java | 16 -------------- src/enginuity/maps/Table.java | 10 --------- src/enginuity/swing/RomTree.java | 3 +++ src/enginuity/swing/RomTreeNode.java | 16 -------------- 5 files changed, 19 insertions(+), 58 deletions(-) diff --git a/src/enginuity/ECUEditor.java b/src/enginuity/ECUEditor.java index d8c0f9e0..37509760 100644 --- a/src/enginuity/ECUEditor.java +++ b/src/enginuity/ECUEditor.java @@ -232,22 +232,23 @@ public class ECUEditor extends JFrame implements WindowListener, PropertyChangeL } public void closeImage() { - for (int i = 0; i < imageRoot.getChildCount(); i++) { - RomTreeNode romTreeNode = (RomTreeNode)imageRoot.getChildAt(i); - Rom rom = romTreeNode.getRom(); - if (rom == lastSelectedRom) { - Vector romTables = rom.getTables(); - for (Iterator j = romTables.iterator(); j.hasNext();) { - Table t = (Table)j.next(); - rightPanel.remove(t.getFrame()); - t.cleanup(); - } - imageRoot.remove(i); - romTreeNode.cleanup(); - break; - } - } + for (int i = 0; i < imageRoot.getChildCount(); i++) { + RomTreeNode romTreeNode = (RomTreeNode)imageRoot.getChildAt(i); + Rom rom = romTreeNode.getRom(); + if (rom == lastSelectedRom) { + Vector
romTables = rom.getTables(); + for (Iterator j = romTables.iterator(); j.hasNext();) { + Table t = (Table)j.next(); + rightPanel.remove(t.getFrame()); + } + imageRoot.remove(i); + break; + } + } + + imageList.cleanup(); imageList.updateUI(); + if (imageRoot.getChildCount() > 0) { setLastSelectedRom(((RomTreeNode)imageRoot.getChildAt(0)).getRom()); } else { @@ -255,7 +256,6 @@ public class ECUEditor extends JFrame implements WindowListener, PropertyChangeL setLastSelectedRom(null); } rightPanel.repaint(); - System.gc(); } public void closeAllImages() { diff --git a/src/enginuity/maps/Rom.java b/src/enginuity/maps/Rom.java index d8abd412..c0d2970b 100644 --- a/src/enginuity/maps/Rom.java +++ b/src/enginuity/maps/Rom.java @@ -128,22 +128,6 @@ public class Rom implements Serializable { return binData; } - public void cleanup() { - try { - container = null; - binData = null; - romID = null; - for (int i = 0; i < tables.size(); i++) { - tables.get(i).getFrame().dispose(); - } - tables.clear(); - tables = null; - } - catch (Throwable t) { - t.printStackTrace(); - } - } - public int getRealFileSize() { return binData.length; } diff --git a/src/enginuity/maps/Table.java b/src/enginuity/maps/Table.java index 4d40aea3..0f24d673 100644 --- a/src/enginuity/maps/Table.java +++ b/src/enginuity/maps/Table.java @@ -919,16 +919,6 @@ public abstract class Table extends JPanel implements Serializable { colorize(); } - /** - * Call when closing to cleanup references and help GC. - */ - public void cleanup() { - data = null; - container = null; - axisParent = null; - centerPanel = null; - } - public int getUserLevel() { return userLevel; } diff --git a/src/enginuity/swing/RomTree.java b/src/enginuity/swing/RomTree.java index 1d878044..a5e2f2f8 100644 --- a/src/enginuity/swing/RomTree.java +++ b/src/enginuity/swing/RomTree.java @@ -60,4 +60,7 @@ public class RomTree extends JTree implements MouseListener { public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } + public void cleanup() { + clearToggledPaths(); + } } \ No newline at end of file diff --git a/src/enginuity/swing/RomTreeNode.java b/src/enginuity/swing/RomTreeNode.java index a18e9cd2..3e467cfd 100644 --- a/src/enginuity/swing/RomTreeNode.java +++ b/src/enginuity/swing/RomTreeNode.java @@ -75,20 +75,4 @@ public class RomTreeNode extends DefaultMutableTreeNode { this.rom = rom; } - public void cleanup() { - try { - if (rom != null) { - rom.cleanup(); - rom = null; - } - removeAllChildren(); - removeFromParent(); - userObject = null; - children.clear(); - children = null; - } - catch (Throwable t) { - t.printStackTrace(); - } - } } \ No newline at end of file