--- ../openjdkb23/openjdk.old/jdk/src/share/classes/java/nio/Buffer.java 2007-10-30 04:36:08.000000000 -0400 +++ openjdk/jdk/src/share/classes/java/nio/Buffer.java 2007-11-13 13:33:28.000000000 -0500 @@ -235,8 +235,8 @@ if ((newPosition > limit) || (newPosition < 0)) throw new IllegalArgumentException(); position = newPosition; - if (mark > position) mark = -1; - return this; + if (mark > position) clearMark(); + return this; } /** @@ -267,8 +267,8 @@ throw new IllegalArgumentException(); limit = newLimit; if (position > limit) position = limit; - if (mark > limit) mark = -1; - return this; + if (mark > position) clearMark(); + return this; } /** @@ -320,8 +320,8 @@ public final Buffer clear() { position = 0; limit = capacity; - mark = -1; - return this; + clearMark(); + return this; } /** @@ -348,7 +348,7 @@ public final Buffer flip() { limit = position; position = 0; - mark = -1; + clearMark(); return this; } @@ -369,7 +369,7 @@ */ public final Buffer rewind() { position = 0; - mark = -1; + clearMark(); return this; } @@ -548,4 +548,8 @@ throw new IndexOutOfBoundsException(); } + final void clearMark() { // package-private + mark = -1; + } + } --- ../openjdkb23/openjdk.old/jdk/src/share/classes/java/nio/Direct-X-Buffer.java 2007-10-30 04:36:08.000000000 -0400 +++ openjdk/jdk/src/share/classes/java/nio/Direct-X-Buffer.java 2007-11-13 13:34:14.000000000 -0500 @@ -354,6 +354,7 @@ unsafe.copyMemory(ix(pos), ix(0), rem << $LG_BYTES_PER_VALUE$); position(rem); limit(capacity()); + clearMark(); return this; #else[rw] throw new ReadOnlyBufferException(); --- ../openjdkb23/openjdk.old/jdk/src/share/classes/java/nio/Heap-X-Buffer.java 2007-10-30 04:36:08.000000000 -0400 +++ openjdk/jdk/src/share/classes/java/nio/Heap-X-Buffer.java 2007-11-13 13:34:27.000000000 -0500 @@ -222,6 +222,7 @@ System.arraycopy(hb, ix(position()), hb, ix(0), remaining()); position(remaining()); limit(capacity()); + clearMark(); return this; #else[rw] throw new ReadOnlyBufferException();