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>
This commit is contained in:
Shawn O. Pearce 2010-05-13 09:56:15 -07:00
parent 3f143b8d6b
commit f999b4aa63
1 changed files with 16 additions and 2 deletions

View File

@ -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;
}