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:
parent
3f143b8d6b
commit
f999b4aa63
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue