Author: schulte Date: Sun Feb 26 10:08:13 2017 New Revision: 1784430 URL: http://svn.apache.org/viewvc?rev=1784430&view=rev Log: [MSHARED-619] StreamFeeder silently ignores exceptions.
Modified: maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/cli/StreamFeeder.java Modified: maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/cli/StreamFeeder.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/cli/StreamFeeder.java?rev=1784430&r1=1784429&r2=1784430&view=diff ============================================================================== --- maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/cli/StreamFeeder.java (original) +++ maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/cli/StreamFeeder.java Sun Feb 26 10:08:13 2017 @@ -33,25 +33,26 @@ import java.util.concurrent.atomic.Atomi class StreamFeeder extends AbstractStreamHandler { + private final AtomicReference<InputStream> input; + private final AtomicReference<OutputStream> output; + private volatile Throwable exception; + /** * Create a new StreamFeeder * - * @param input Stream to read from + * @param input Stream to read from * @param output Stream to write to */ public StreamFeeder( InputStream input, OutputStream output ) { + super(); this.input = new AtomicReference<InputStream>( input ); this.output = new AtomicReference<OutputStream>( output ); } - // ---------------------------------------------------------------------- - // Runnable implementation - // ---------------------------------------------------------------------- - @Override public void run() { @@ -62,6 +63,10 @@ class StreamFeeder catch ( Throwable e ) { // Catch everything so the streams will be closed and flagged as done. + if ( this.exception != null ) + { + this.exception = e; + } } finally { @@ -74,10 +79,6 @@ class StreamFeeder } } - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- - public void close() { setDone(); @@ -90,7 +91,10 @@ class StreamFeeder } catch ( IOException ex ) { - // ignore + if ( this.exception != null ) + { + this.exception = ex; + } } } @@ -103,14 +107,21 @@ class StreamFeeder } catch ( IOException ex ) { - // ignore + if ( this.exception != null ) + { + this.exception = ex; + } } } } - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- + /** + * @since 3.2.0 + */ + public Throwable getException() + { + return this.exception; + } @SuppressWarnings( "checkstyle:innerassignment" ) private void feed()