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 2008/10/22 21:59:02 UTC
svn commit: r707179 -
/jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
Author: sebb
Date: Wed Oct 22 12:59:01 2008
New Revision: 707179
URL: http://svn.apache.org/viewvc?rev=707179&view=rev
Log:
Fix problem caused by implementing NoThreadClone:
- use the files HashMap to close files correctly
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java?rev=707179&r1=707178&r2=707179&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java Wed Oct 22 12:59:01 2008
@@ -35,6 +35,7 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
import org.apache.jmeter.engine.event.LoopIterationEvent;
@@ -97,7 +98,21 @@
// Static variables
- private static final Map files = new HashMap();
+ private static final Map files = new HashMap(); // key=filename, entry=FileEntry
+
+ /*
+ * Keep track of the file writer and the configuration,
+ * as the instance used to close them is not the same as the instance that creates
+ * them. This means one cannot use the saved PrintWriter or use getSaveConfig()
+ */
+ private static class FileEntry{
+ final PrintWriter pw;
+ final SampleSaveConfiguration config;
+ FileEntry(PrintWriter _pw, SampleSaveConfiguration _config){
+ pw =_pw;
+ config = _config;
+ }
+ }
private static int instanceCount; // Keep track of how many instances are active
@@ -330,10 +345,11 @@
if (filename == null || filename.length() == 0) {
return null;
}
- PrintWriter writer = (PrintWriter) files.get(filename);
+ FileEntry fe = (FileEntry) files.get(filename);
+ PrintWriter writer = null;
boolean trimmed = true;
- if (writer == null) {
+ if (fe == null) {
if (saveConfig.saveAsXml()) {
trimmed = trimLastLine(filename);
} else {
@@ -349,7 +365,10 @@
}
writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(filename,
trimmed)), SaveService.getFileEncoding("UTF-8")), true); // $NON-NLS-1$
- files.put(filename, writer);
+ log.debug("Opened file: "+filename);
+ files.put(filename, new FileEntry(writer, saveConfig));
+ } else {
+ writer = fe.pw;
}
if (!trimmed) {
writeFileStart(writer, saveConfig);
@@ -519,12 +538,15 @@
}
private synchronized void finalizeFileOutput() {
- if (out != null) {
- writeFileEnd(out, getSaveConfig());
- out.close();
- files.remove(getFilename());
- out = null;
+ Iterator it = files.entrySet().iterator();
+ while(it.hasNext()){
+ Map.Entry me = (Map.Entry) it.next();
+ log.debug("Closing: "+me.getKey());
+ FileEntry fe = (FileEntry) me.getValue();
+ writeFileEnd(fe.pw, fe.config);
+ fe.pw.close();
}
+ files.clear();
}
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org