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