diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index bee1eb0d9071e35798d482721cc5d2a63f6a6fa6..be55e41de0145ec3521f599a568a027d4713c1f2 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-14  Andrew Haley  <aph@redhat.com>
+
+	* gnu/java/rmi/rmic/CompilerProcess.java: Use a new thread to
+	handle stdout from the child process.
+
 2005-12-14  Tom Tromey  <tromey@redhat.com>
 
 	PR classpath/25389:
diff --git a/libjava/gnu/java/rmi/rmic/CompilerProcess.java b/libjava/gnu/java/rmi/rmic/CompilerProcess.java
index 3cf801d42d28199b0344101bb337aac0b8fd86bc..09f8d9c07b47c215c2e691b2abca8ffe3fde0100 100644
--- a/libjava/gnu/java/rmi/rmic/CompilerProcess.java
+++ b/libjava/gnu/java/rmi/rmic/CompilerProcess.java
@@ -89,10 +89,27 @@ public abstract class CompilerProcess extends Compiler
     String[] args = computeArguments (name);
     Process p = Runtime.getRuntime ().exec (args);
 
-    /* Print compiler output to System.out. */
-    InputStream procin = p.getInputStream();
-    for (int ch = procin.read(); ch != -1; ch = procin.read())
-      System.out.print((char) ch);
+    /* Print compiler output to System.out.  Do this asynchronously so
+       that the compiler never blocks writing to its stdout.  */
+    {
+      final InputStream procin = p.getInputStream();
+      final Thread copier = new Thread() 
+	{
+	  public void run()
+	  {
+	    try
+	      {
+		for (int ch = procin.read(); ch != -1; ch = procin.read())
+		  System.out.print((char) ch);
+	      }
+	    catch (java.io.IOException _)
+	      {
+	      }
+	  }
+	};
+
+      copier.start();
+    }
 
     /* Collect compiler error output in a buffer.
      * If compilation fails, it will be used for an error message.