diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java
index 50f42ad4fcd94f93361037467b0ece305fd507f2..bf47d199af68b66fe106f183e34cabb8fa59c933 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java
@@ -100,11 +100,25 @@ public void run() {
 					try {
 						n = src.read(buf);
 					} catch (InterruptedIOException wakey) {
-						continue;
+						if (flushCounter.get() > 0)
+							continue;
+						else
+							throw wakey;
 					}
 					if (n < 0)
 						break;
-					dst.write(buf, 0, n);
+
+					for (;;) {
+						try {
+							dst.write(buf, 0, n);
+						} catch (InterruptedIOException wakey) {
+							if (flushCounter.get() > 0)
+								continue;
+							else
+								throw wakey;
+						}
+						break;
+					}
 				} catch (IOException e) {
 					break;
 				}