Browse Source

Fix interrupted write in StreamCopyThread

If a flush() gets delivered at the same time that we are blocking
while writing to an interruptable stream, the copy thread will
abort assuming its a stream error.  Instead ignore the interrupt,
and retry the write.

Change-Id: Icbf62d1b8abe0fabbb532dbee088020eecf4c6c2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
tags/v0.8.1
Shawn O. Pearce 14 years ago
parent
commit
f999b4aa63
1 changed files with 16 additions and 2 deletions
  1. 16
    2
      org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java

+ 16
- 2
org.eclipse.jgit/src/org/eclipse/jgit/util/io/StreamCopyThread.java View File

@@ -100,11 +100,25 @@ public class StreamCopyThread extends Thread {
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;
}

Loading…
Cancel
Save