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 2009/04/20 16:47:06 UTC

svn commit: r766712 - /jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java

Author: sebb
Date: Mon Apr 20 14:47:06 2009
New Revision: 766712

URL: http://svn.apache.org/viewvc?rev=766712&view=rev
Log:
Tidyup; add askThreadsToStopNow() method

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=766712&r1=766711&r2=766712&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 Mon Apr 20 14:47:06 2009
@@ -61,14 +61,15 @@
     /** JMeterThread => its JVM thread */
     private final Map/*<JMeterThread, Thread>*/ allThreads;
 
-    private volatile boolean startingGroups; // flag to show that groups are still being created
+    /** flag to show that groups are still being created, i.e test plan is not complete */
+    private volatile boolean startingGroups;
 
+    /** Flag to show whether test is running. Set to false to stop creating more threads. */
     private volatile boolean running = false;
 
+    /** Thread Groups run sequentially */
     private volatile boolean serialized = false;
 
-    private volatile boolean schedule_run = false;
-
     private HashTree test;
 
     private volatile SearchByClass testListenersSave;
@@ -264,11 +265,12 @@
         }
     }
 
+    // Called by JMeter thread when it finishes
     public synchronized void threadFinished(JMeterThread thread) {
         try {
             allThreads.remove(thread);
             log.info("Ending thread " + thread.getThreadName());
-            if (!serialized && !schedule_run && !startingGroups && allThreads.size() == 0 ) {
+            if (!startingGroups && allThreads.size() == 0 ) {
                 log.info("Stopping test");
                 stopTest();
             }
@@ -374,12 +376,11 @@
 
         ListenerNotifier notifier = new ListenerNotifier();
 
-        schedule_run = true;
         JMeterContextService.getContext().setSamplingStarted(true);
         int groupCount = 0;
         JMeterContextService.clearTotalThreads();
         startingGroups = true;
-        while (iter.hasNext()) {
+        while (running && iter.hasNext()) {// for each thread group
             groupCount++;
             ThreadGroup group = (ThreadGroup) iter.next();
             int numThreads = group.getNumThreads();
@@ -420,14 +421,10 @@
                 Thread newThread = new Thread(jmeterThread);
                 newThread.setName(threadName);
                 allThreads.put(jmeterThread, newThread);
-                if (serialized && !iter.hasNext() && i == numThreads - 1) // last thread
-                {
-                    serialized = false;
-                }
                 newThread.start();
-            }
-            schedule_run = false;
-            if (serialized) {
+            } // end of thread startup for this thread group
+            if (serialized && !iter.hasNext()) {
+                log.info("Waiting for thread group: "+groupName+" to finish before starting next group");
                 while (running && allThreads.size() > 0) {
                     try {
                         Thread.sleep(1000);
@@ -435,6 +432,11 @@
                     }
                 }
             }
+        } // end of thread groups
+        if (running) {
+            log.info("All threads have been started");
+        } else {
+            log.info("Test stopped - no more threads will be started");
         }
         startingGroups = false;
     }
@@ -511,6 +513,10 @@
         engine.stopTest(false);
     }
 
+    public void askThreadsToStopNow() {
+        engine.stopTest(true);
+    }
+
     private void stopAllThreads() {
         Iterator iter = new HashSet(allThreads.keySet()).iterator();
         while (iter.hasNext()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org