Skip to content

Commit f506a57

Browse files
committed
Fix #68 Was a problem with thread unsafe list
1 parent 03f7a4d commit f506a57

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

src/main/java/net/mindengine/galen/GalenMain.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.List;
3030
import java.util.concurrent.ExecutorService;
3131
import java.util.concurrent.Executors;
32+
import java.util.concurrent.locks.ReentrantLock;
3233
import java.util.regex.Pattern;
3334

3435
import 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

Comments
 (0)