2929import java .util .List ;
3030import java .util .concurrent .ExecutorService ;
3131import java .util .concurrent .Executors ;
32+ import java .util .concurrent .locks .ReentrantLock ;
3233import java .util .regex .Pattern ;
3334
3435import net .mindengine .galen .browser .SeleniumBrowserFactory ;
@@ -262,7 +263,9 @@ private void runTestsInThreads(final EventHandler eventHandler, List<GalenTest>
262263 Pattern filterPattern = createTestFilter (arguments .getFilter ());
263264 final List <GalenTestInfo > testInfos = new LinkedList <GalenTestInfo >();
264265
265- tellBeforeTestSuite (listener , tests );
266+ tellBeforeTestSuite (listener , tests );
267+
268+ final ReentrantLock testInfoLock = new ReentrantLock ();
266269
267270 for (final GalenTest test : tests ) {
268271 if (matchesPattern (test .getName (), filterPattern )) {
@@ -271,17 +274,26 @@ private void runTestsInThreads(final EventHandler eventHandler, List<GalenTest>
271274 public void run () {
272275
273276 GalenTestInfo info = new GalenTestInfo (test );
274- testInfos . add ( info );
277+ TestReport report = new TestReport ( );
275278 info .setName (test .getName ());
276279
277280 info .setStartedAt (new Date ());
278- TestReport report = new TestReport ();
279281 info .setReport (report );
280282
281- TestSession session = TestSession .register (info , test );
282- session .setReport (report );
283- session .setListener (listener );
284283
284+ testInfoLock .lock ();
285+ try {
286+ testInfos .add (info );
287+ TestSession session = TestSession .register (info , test );
288+ session .setReport (report );
289+ session .setListener (listener );
290+ }
291+ catch (Exception ex ) {
292+ ex .printStackTrace ();
293+ }
294+ finally {
295+ testInfoLock .unlock ();
296+ }
285297
286298 eventHandler .invokeBeforeTestEvents (info );
287299
@@ -292,14 +304,13 @@ public void run() {
292304 catch (Throwable ex ) {
293305 info .setException (ex );
294306 report .error (ex );
307+ ex .printStackTrace ();
295308 }
296309 info .setEndedAt (new Date ());
297310
298311 eventHandler .invokeAfterTestEvents (info );
299312 tellTestFinished (listener , test );
300313
301-
302-
303314 TestSession .clear ();
304315 }
305316 };
0 commit comments