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-unsubscr...@jakarta.apache.org For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org