--- old/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template 2019-12-09 18:15:07.315595297 +0000 +++ new/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template 2019-12-09 18:15:06.855587141 +0000 @@ -28,6 +28,7 @@ package java.nio; import java.util.Objects; +import jdk.internal.access.foreign.MemorySegmentProxy; import jdk.internal.misc.Unsafe; class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private @@ -40,11 +41,11 @@ #end[rw] - ByteBufferAs$Type$Buffer$RW$$BO$(ByteBuffer bb) { // package-private + ByteBufferAs$Type$Buffer$RW$$BO$(ByteBuffer bb, MemorySegmentProxy segment) { // package-private #if[rw] super(-1, 0, bb.remaining() >> $LG_BYTES_PER_VALUE$, - bb.remaining() >> $LG_BYTES_PER_VALUE$); + bb.remaining() >> $LG_BYTES_PER_VALUE$, segment); this.bb = bb; // enforce limit == capacity int cap = this.capacity(); @@ -53,21 +54,21 @@ assert (pos <= cap); address = bb.address; #else[rw] - super(bb); + super(bb, segment); #end[rw] } ByteBufferAs$Type$Buffer$RW$$BO$(ByteBuffer bb, int mark, int pos, int lim, int cap, - long addr) + long addr, MemorySegmentProxy segment) { #if[rw] - super(mark, pos, lim, cap); + super(mark, pos, lim, cap, segment); this.bb = bb; address = addr; assert address >= bb.address; #else[rw] - super(bb, mark, pos, lim, cap, addr); + super(bb, mark, pos, lim, cap, addr, segment); #end[rw] } @@ -82,7 +83,7 @@ assert (pos <= lim); int rem = (pos <= lim ? lim - pos : 0); long addr = byteOffset(pos); - return new ByteBufferAs$Type$Buffer$RW$$BO$(bb, -1, 0, rem, rem, addr); + return new ByteBufferAs$Type$Buffer$RW$$BO$(bb, -1, 0, rem, rem, addr, segment); } @Override @@ -93,7 +94,7 @@ 0, length, length, - byteOffset(index)); + byteOffset(index), segment); } public $Type$Buffer duplicate() { @@ -102,7 +103,7 @@ this.position(), this.limit(), this.capacity(), - address); + address, segment); } public $Type$Buffer asReadOnlyBuffer() { @@ -112,7 +113,7 @@ this.position(), this.limit(), this.capacity(), - address); + address, segment); #else[rw] return duplicate(); #end[rw] @@ -130,12 +131,14 @@ } public $type$ get() { + checkSegment(); $memtype$ x = UNSAFE.get$Memtype$Unaligned(bb.hb, byteOffset(nextGetIndex()), {#if[boB]?true:false}); return $fromBits$(x); } public $type$ get(int i) { + checkSegment(); $memtype$ x = UNSAFE.get$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)), {#if[boB]?true:false}); return $fromBits$(x); @@ -153,6 +156,7 @@ public $Type$Buffer put($type$ x) { #if[rw] + checkSegment(); $memtype$ y = $toBits$(x); UNSAFE.put$Memtype$Unaligned(bb.hb, byteOffset(nextPutIndex()), y, {#if[boB]?true:false}); @@ -164,6 +168,7 @@ public $Type$Buffer put(int i, $type$ x) { #if[rw] + checkSegment(); $memtype$ y = $toBits$(x); UNSAFE.put$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)), y, {#if[boB]?true:false}); @@ -237,7 +242,7 @@ pos + start, pos + end, capacity(), - address); + address, segment); } #end[char]