Skip to content
This repository was archived by the owner on Dec 12, 2022. It is now read-only.

Commit 1ff8b4b

Browse files
committed
Remove work-around for slice-of-heap-segment-based-buffer JDK bug that got fixed
1 parent e22b57d commit 1ff8b4b

File tree

1 file changed

+6
-12
lines changed

1 file changed

+6
-12
lines changed

src/main/java/io/netty/buffer/api/memseg/MemSegBuf.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)