JDK 9 RFR of 8176394: Incorrect relational operator in java/nio/channels/FileChannel/InterruptDeadlock.java
Brian Burkhalter
brian.burkhalter at oracle.com
Wed Mar 8 19:12:13 UTC 2017
Please review the change below for [1]. The Reader thread run() method is supposed to read continuously from the FileChannel fc. However ‘pos’ will eventually equal fc.size() at which point fc.read() will always return -1 and ‘pos’ will not be reset to zero in contravention of the intent of the test.
Thanks,
Brian
@@ -51,21 +51,21 @@
public void run() {
ByteBuffer bb = ByteBuffer.allocate(1024);
try {
long pos = 0L;
for (;;) {
bb.clear();
int n = fc.read(bb, pos);
if (n > 0)
pos += n;
// fc.size is important here as it is position sensitive
- if (pos > fc.size())
+ if (pos >= fc.size())
pos = 0L;
}
} catch (ClosedChannelException x) {
System.out.println(x.getClass() + " (expected)");
} catch (Exception unexpected) {
this.exception = unexpected;
}
}
[1] https://bugs.openjdk.java.net/browse/JDK-8176394
More information about the nio-dev
mailing list