You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2007/12/05 20:17:38 UTC

svn commit: r601473 - in /jakarta/jmeter/trunk: src/core/org/apache/jmeter/gui/ src/core/org/apache/jmeter/gui/action/ src/core/org/apache/jmeter/gui/tree/ src/core/org/apache/jmeter/reporters/ xdocs/

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="mramshaw@alumni.concordia.ca">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 {@link 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 {@link 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: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org