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