@@ -62,27 +62,22 @@ class MemSegBuf extends RcSupport<Buf, MemSegBuf> implements Buf, ReadableCompon
6262
6363 private final AllocatorControl alloc ;
6464 private final boolean isSendable ;
65- // TODO remove baseOffset when JDK bug is fixed (slices of heap buffers)
66- // See https://mail.openjdk.java.net/pipermail/panama-dev/2021-January/011810.html
67- private final int baseOffset ;
6865 private MemorySegment seg ;
6966 private MemorySegment wseg ;
7067 private ByteOrder order ;
7168 private int roff ;
7269 private int woff ;
7370
7471 MemSegBuf (MemorySegment segmet , Drop <MemSegBuf > drop , AllocatorControl alloc ) {
75- this (segmet , drop , alloc , true , 0 );
72+ this (segmet , drop , alloc , true );
7673 }
7774
78- private MemSegBuf (MemorySegment segment , Drop <MemSegBuf > drop , AllocatorControl alloc , boolean isSendable ,
79- int baseOffset ) {
75+ private MemSegBuf (MemorySegment segment , Drop <MemSegBuf > drop , AllocatorControl alloc , boolean isSendable ) {
8076 super (drop );
8177 this .alloc = alloc ;
8278 seg = segment ;
8379 wseg = segment ;
8480 this .isSendable = isSendable ;
85- this .baseOffset = baseOffset ;
8681 order = ByteOrder .nativeOrder ();
8782 }
8883
@@ -162,17 +157,16 @@ public long readableNativeAddress() {
162157 @ Override
163158 public ByteBuffer readableBuffer () {
164159 var buffer = seg .asByteBuffer ();
165- int base = baseOffset ;
166160 if (buffer .isDirect ()) {
167161 // TODO Remove this when the slicing of shared, native segments JDK bug is fixed.
162+ // See https://mail.openjdk.java.net/pipermail/panama-dev/2021-January/011810.html
168163 ByteBuffer tmp = ByteBuffer .allocateDirect (buffer .capacity ());
169164 tmp .put (buffer );
170165 buffer = tmp .position (0 );
171- base = 0 ; // TODO native memory segments do not have the buffer-of-slice bug.
172166 }
173167 buffer = buffer .asReadOnlyBuffer ();
174168 // TODO avoid slicing and just set position+limit when JDK bug is fixed.
175- return buffer .slice (base + readerOffset (), readableBytes ()).order (order );
169+ return buffer .slice (readerOffset (), readableBytes ()).order (order );
176170 }
177171
178172 @ Override
@@ -203,7 +197,7 @@ public ByteBuffer writableBuffer() {
203197 buffer = buffer .position (writerOffset ()).limit (writerOffset () + writableBytes ());
204198 } else {
205199 // TODO avoid slicing and just set position when JDK bug is fixed.
206- buffer = buffer .slice (baseOffset + writerOffset (), writableBytes ());
200+ buffer = buffer .slice (writerOffset (), writableBytes ());
207201 }
208202 return buffer .order (order );
209203 }
@@ -241,7 +235,7 @@ public Buf slice(int offset, int length) {
241235 b .makeInaccessible ();
242236 };
243237 var sendable = false ; // Sending implies ownership change, which we can't do for slices.
244- return new MemSegBuf (slice , drop , alloc , sendable , baseOffset + offset )
238+ return new MemSegBuf (slice , drop , alloc , sendable )
245239 .writerOffset (length )
246240 .order (order ())
247241 .readOnly (readOnly ());
0 commit comments