This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch SUREFIRE-1945-2223 in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit fd9eaea50c323a6f052e2a201440386ad157c8e8 Author: tibor.digana <tibordig...@apache.org> AuthorDate: Wed Feb 9 03:30:03 2022 +0100 [SUREFIRE-1945] crashed tests - unit tests with large logging output does not produce surefire report --- .../surefire/booterclient/output/ThreadedStreamConsumer.java | 10 ++++++++-- .../java/org/apache/maven/surefire/booter/ForkedBooter.java | 11 ++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java index 093c191..672c797 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java @@ -42,6 +42,8 @@ public final class ThreadedStreamConsumer private static final int ITEM_LIMIT_BEFORE_SLEEP = 10 * 1000; + private static final long CLOSE_TIMEOUT_MILLIS = 5 * 60 * 1000L; + private final BlockingQueue<String> items = new ArrayBlockingQueue<String>( ITEM_LIMIT_BEFORE_SLEEP ); private final AtomicBoolean stop = new AtomicBoolean(); @@ -136,17 +138,21 @@ public final class ThreadedStreamConsumer public void close() throws IOException { - if ( stop.compareAndSet( false, true ) ) + if ( !stop.get() ) { - items.clear(); try { items.put( END_ITEM ); + thread.join( CLOSE_TIMEOUT_MILLIS ); } catch ( InterruptedException e ) { currentThread().interrupt(); } + finally + { + stop.set( true ); + } } if ( pumper.hasErrors() ) diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java index 580132a..3593aa7 100644 --- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java +++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java @@ -43,9 +43,8 @@ import java.util.concurrent.Semaphore; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicBoolean; -import static java.lang.Math.max; import static java.lang.Thread.currentThread; -import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; import static org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_BYE; import static org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_ERROR; @@ -69,7 +68,6 @@ public final class ForkedBooter { private static final long DEFAULT_SYSTEM_EXIT_TIMEOUT_IN_SECONDS = 30L; private static final long PING_TIMEOUT_IN_SECONDS = 30L; - private static final long ONE_SECOND_IN_MILLIS = 1000L; private static final String LAST_DITCH_SHUTDOWN_THREAD = "surefire-forkedjvm-last-ditch-daemon-shutdown-thread-"; private static final String PING_THREAD = "surefire-forkedjvm-ping-"; @@ -331,8 +329,7 @@ public final class ForkedBooter ); encodeAndWriteToOutput( ( (char) BOOTERCODE_BYE ) + ",0,BYE!\n" ); launchLastDitchDaemonShutdownThread( 0 ); - long timeoutMillis = max( systemExitTimeoutInSeconds * ONE_SECOND_IN_MILLIS, ONE_SECOND_IN_MILLIS ); - acquireOnePermit( barrier, timeoutMillis ); + acquireOnePermit( barrier ); cancelPingScheduler(); commandReader.stop(); System.exit( 0 ); @@ -431,11 +428,11 @@ public final class ForkedBooter return pluginProcessChecker != null && pluginProcessChecker.canUse(); } - private static boolean acquireOnePermit( Semaphore barrier, long timeoutMillis ) + private static boolean acquireOnePermit( Semaphore barrier ) { try { - return barrier.tryAcquire( timeoutMillis, MILLISECONDS ); + return barrier.tryAcquire( Long.MAX_VALUE, NANOSECONDS ); } catch ( InterruptedException e ) {