diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java index dcd7970cb..2f570ee51 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java @@ -59,7 +59,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -1011,16 +1010,13 @@ public int runProcess(ProcessBuilder processBuilder, IOException ioException = null; try { process = processBuilder.start(); - final Callable errorGobbler = new StreamGobbler( - process.getErrorStream(), errRedirect); - final Callable outputGobbler = new StreamGobbler( - process.getInputStream(), outRedirect); - executor.submit(errorGobbler); - executor.submit(outputGobbler); + executor.execute( + new StreamGobbler(process.getErrorStream(), errRedirect)); + executor.execute( + new StreamGobbler(process.getInputStream(), outRedirect)); OutputStream outputStream = process.getOutputStream(); if (inRedirect != null) { - new StreamGobbler(inRedirect, outputStream) - .call(); + new StreamGobbler(inRedirect, outputStream).copy(); } try { outputStream.close(); @@ -1336,7 +1332,7 @@ public String normalize(String name) { * streams. *

*/ - private static class StreamGobbler implements Callable { + private static class StreamGobbler implements Runnable { private InputStream in; private OutputStream out; @@ -1346,7 +1342,15 @@ public StreamGobbler(InputStream stream, OutputStream output) { this.out = output; } - public Void call() throws IOException { + public void run() { + try { + copy(); + } catch (IOException e) { + // Do nothing on read failure; leave streams open. + } + } + + void copy() throws IOException { boolean writeFailure = false; byte buffer[] = new byte[4096]; int readBytes; @@ -1363,7 +1367,6 @@ public Void call() throws IOException { } } } - return null; } } }