Author: sebb
Date: Sat Apr 18 14:48:12 2009
New Revision: 766332

URL: http://svn.apache.org/viewvc?rev=766332&view=rev
Log:
Confine variables to thread as much as possible

Modified:
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=766332&r1=766331&r2=766332&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
 Sat Apr 18 14:48:12 2009
@@ -71,7 +71,7 @@
 
     private HashTree test;
 
-    private SearchByClass testListeners;
+    private volatile SearchByClass testListenersSave;
 
     private final String host;
 
@@ -92,9 +92,9 @@
     // e.g. from beanshell server
     // Assumes that there is only one instance of the engine
     // at any one time so it is not guaranteed to work ...
-    private static Map/*<String, JMeterThread>*/ allThreadNames; //TODO does 
not appear to be set up yet
+    private static Map/*<String, JMeterThread>*/ allThreadNames; //TODO does 
not appear to be populated yet
 
-    private static StandardJMeterEngine engine;
+    private volatile static StandardJMeterEngine engine;
 
     /** Unmodifiable static version of {...@link allThreads} JMeterThread => 
JVM Thread */
     private static Map/*<JMeterThread, Thread>*/  allThreadsSave;
@@ -212,7 +212,7 @@
         }
     }
 
-    private void notifyTestListenersOfStart() {
+    private void notifyTestListenersOfStart(SearchByClass testListeners) {
         Iterator iter = testListeners.getSearchResults().iterator();
         while (iter.hasNext()) {
             TestListener tl = (TestListener) iter.next();
@@ -227,7 +227,7 @@
         }
     }
 
-    private void notifyTestListenersOfEnd() {
+    private void notifyTestListenersOfEnd(SearchByClass testListeners) {
         log.info("Notifying test listeners of end of test", new Throwable());
         Iterator iter = testListeners.getSearchResults().iterator();
         while (iter.hasNext()) {
@@ -307,7 +307,7 @@
                 }
                 boolean stopped = verifyThreadsStopped();
                 if (stopped || now) {
-                    notifyTestListenersOfEnd();
+                    notifyTestListenersOfEnd(testListenersSave);
                 }
             }
         }
@@ -341,7 +341,7 @@
          * Notification of test listeners needs to happen after function
          * replacement, but before setting RunningVersion to true.
          */
-        testListeners = new SearchByClass(TestListener.class);
+        SearchByClass testListeners = new SearchByClass(TestListener.class);
         test.traverse(testListeners);
 
         // Merge in any additional test listeners
@@ -349,9 +349,11 @@
         testListeners.getSearchResults().addAll(testList);
         testList.clear(); // no longer needed
 
-        if (!startListenersLater ) { notifyTestListenersOfStart(); }
+        testListenersSave = testListeners;
+
+        if (!startListenersLater ) { 
notifyTestListenersOfStart(testListeners); }
         test.traverse(new TurnElementsOn());
-        if (startListenersLater) { notifyTestListenersOfStart(); }
+        if (startListenersLater) { notifyTestListenersOfStart(testListeners); }
 
         List testLevelElements = new LinkedList(test.list(test.getArray()[0]));
         removeThreadGroups(testLevelElements);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to