Author: sebb
Date: Wed Dec  5 11:17:36 2007
New Revision: 601473

URL: http://svn.apache.org/viewvc?rev=601473&view=rev
Log:
Bug 44022 - Memory Leak when closing test plan

Modified:
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/AbstractListenerElement.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java Wed Dec 
 5 11:17:36 2007
@@ -462,6 +462,11 @@
         * 
         * @return the JMeter tree model
         */
+       /*
+        * TODO consider removing this method, and providing method wrappers 
instead.
+        * This would allow the Gui package to do any additional clearups if 
required,
+        * as has been done with clearTestPlan()
+       */ 
        public JMeterTreeModel getTreeModel() {
                return treeModel;
        }
@@ -619,6 +624,25 @@
                return testPlanFile;
        }
 
+       /**
+        * Clears the test plan and associated objects.
+        * Clears the test plan file name.
+        */
+    public void clearTestPlan() {
+        getTreeModel().clearTestPlan();
+        nodesToGui.clear();
+        setTestPlanFile(null);
+    }
+
+    /**
+     * Clears the test plan element and associated object
+     * 
+     * @param element to clear
+     */
+    public void clearTestPlan(TestElement element) {
+        getTreeModel().clearTestPlan(element);
+        removeNode(element);
+    }
 
     public static void showErrorMessage(final String message, final String 
title){
         showMessage(message,title,JOptionPane.ERROR_MESSAGE);

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java Wed 
Dec  5 11:17:36 2007
@@ -31,8 +31,6 @@
  * This command clears the existing test plan, allowing the creation of a New
  * test plan.
  * 
- * @author <a href="[EMAIL PROTECTED]">Martin Ramshaw</a> Created
- *         June 6, 2002
  */
 public class Close implements Command {
 
@@ -96,11 +94,8 @@
        static void closeProject(ActionEvent e) {
                GuiPackage guiPackage = GuiPackage.getInstance();
 
-               guiPackage.getTreeModel().clearTestPlan();
+               guiPackage.clearTestPlan();
                guiPackage.getTreeListener().getJTree().setSelectionRow(1);
-
-               // Clear the name of the test plan file
-               guiPackage.setTestPlanFile(null);
 
                ActionRouter.getInstance().actionPerformed(new 
ActionEvent(e.getSource(), e.getID(), ActionNames.ADD_ALL));
        }

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java Wed 
Dec  5 11:17:36 2007
@@ -146,7 +146,7 @@
                // If we are loading a new test plan, initialize the tree with 
the testplan node we are loading
                GuiPackage guiInstance = GuiPackage.getInstance();
                if(isTestPlan && !merging) {
-                       
guiInstance.getTreeModel().clearTestPlan((TestElement)tree.getArray()[0]);
+                       
guiInstance.clearTestPlan((TestElement)tree.getArray()[0]);
                }
 
                if (merging){ // Check if target of merge is reasonable

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java 
(original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java 
Wed Dec  5 11:17:36 2007
@@ -195,7 +195,9 @@
        }
 
     /**
-     * Clear the test plan, and use default node for test plan and workbench
+     * Clear the test plan, and use default node for test plan and workbench.
+     * 
+     * N.B. Should only be called by [EMAIL PROTECTED] 
GuiPackage#clearTestPlan()}
      */
        public void clearTestPlan() {
                TestElement tp = new TestPlanGui().createTestElement();
@@ -204,6 +206,8 @@
     
     /**
      * Clear the test plan, and use specified node for test plan and default 
node for workbench
+     * 
+     * N.B. Should only be called by [EMAIL PROTECTED] 
GuiPackage#clearTestPlan(TestElement)}
      * 
      * @param testPlan the node to use as the testplan top node
      */

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/AbstractListenerElement.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/AbstractListenerElement.java?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/AbstractListenerElement.java
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/AbstractListenerElement.java
 Wed Dec  5 11:17:36 2007
@@ -18,32 +18,37 @@
 
 package org.apache.jmeter.reporters;
 
+import java.lang.ref.WeakReference;
+
 import org.apache.jmeter.testelement.AbstractTestElement;
 import org.apache.jmeter.visualizers.Visualizer;
 
 /**
- * @author Michael Stover
- * @version $Revision$
+ * Base class for Listeners
  */
 
 public abstract class AbstractListenerElement extends AbstractTestElement {
-       transient private Visualizer listener;
+       // TODO should class implement SampleListener?
+       transient private WeakReference listener;
 
        public AbstractListenerElement() {
        }
 
-       protected Visualizer getVisualizer() {
-               return listener;
+       protected final Visualizer getVisualizer() {
+               if (listener == null){ // e.g. in non-GUI mode
+                       return null;
+               }
+               return (Visualizer)listener.get();
        }
 
        public void setListener(Visualizer vis) {
-               listener = vis;
+               listener = new WeakReference(vis);
        }
 
        public Object clone() {
                AbstractListenerElement clone = (AbstractListenerElement) 
super.clone();
 
-               clone.setListener(getVisualizer());
+               clone.listener=this.listener;
                return clone;
        }
 }

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=601473&r1=601472&r2=601473&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Dec  5 11:17:36 2007
@@ -49,6 +49,7 @@
 <li>Bug 44011 - application/soap+xml not treated as a text type</li>
 <li>Bug 43427 - Simple Controller is only partly executed in While loop</li>
 <li>Bug 33954 - Stack Overflow in If/While controllers (may have been fixed 
previously)</li>
+<li>Bug 44022 - Memory Leak when closing test plan</li>
 </ul>
 
 <h4>Improvements</h4>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to