Merge pull request #66 from netty/panama-fixups
Remove hacks related to the now lifted ByteBuffer/MemorySegment restrictions
This commit is contained in:
commit
fc7ba4522f
@ -1244,23 +1244,7 @@ public final class ByteBufAdaptor extends ByteBuf {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
int read;
|
int read = (int) in.read(components);
|
||||||
if (isDirect()) {
|
|
||||||
// TODO we cannot use off-heap buffers here, until the JDK allows direct byte buffers based on native
|
|
||||||
// memory segments to be used in IO operations.
|
|
||||||
ByteBuffer[] copies = new ByteBuffer[components.length];
|
|
||||||
for (int i = 0; i < copies.length; i++) {
|
|
||||||
copies[i] = ByteBuffer.allocateDirect(components[i].remaining());
|
|
||||||
}
|
|
||||||
read = (int) in.read(copies);
|
|
||||||
for (int i = 0; i < copies.length; i++) {
|
|
||||||
ByteBuffer copy = copies[i];
|
|
||||||
ByteBuffer component = components[i];
|
|
||||||
component.put(copy.flip()).flip();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
read = (int) in.read(components);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read > 0) {
|
if (read > 0) {
|
||||||
writerIndex(read + writerIndex());
|
writerIndex(read + writerIndex());
|
||||||
|
@ -237,16 +237,9 @@ class MemSegBuffer extends RcSupport<Buffer, MemSegBuffer> implements Buffer, Re
|
|||||||
@Override
|
@Override
|
||||||
public ByteBuffer readableBuffer() {
|
public ByteBuffer readableBuffer() {
|
||||||
var buffer = seg.asByteBuffer();
|
var buffer = seg.asByteBuffer();
|
||||||
if (buffer.isDirect()) {
|
|
||||||
// TODO Remove this when the slicing of shared, native segments JDK bug is fixed.
|
|
||||||
// See https://mail.openjdk.java.net/pipermail/panama-dev/2021-January/011810.html
|
|
||||||
ByteBuffer tmp = ByteBuffer.allocateDirect(buffer.capacity());
|
|
||||||
tmp.put(buffer);
|
|
||||||
buffer = tmp.position(0);
|
|
||||||
}
|
|
||||||
buffer = buffer.asReadOnlyBuffer();
|
buffer = buffer.asReadOnlyBuffer();
|
||||||
// TODO avoid slicing and just set position+limit when JDK bug is fixed.
|
buffer = buffer.position(readerOffset()).limit(readerOffset() + readableBytes());
|
||||||
return buffer.slice(readerOffset(), readableBytes()).order(order);
|
return buffer.order(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -277,24 +270,17 @@ class MemSegBuffer extends RcSupport<Buffer, MemSegBuffer> implements Buffer, Re
|
|||||||
@Override
|
@Override
|
||||||
public ByteBuffer writableBuffer() {
|
public ByteBuffer writableBuffer() {
|
||||||
var buffer = wseg.asByteBuffer();
|
var buffer = wseg.asByteBuffer();
|
||||||
|
buffer = buffer.position(writerOffset()).limit(writerOffset() + writableBytes());
|
||||||
if (buffer.isDirect()) {
|
|
||||||
buffer = buffer.position(writerOffset()).limit(writerOffset() + writableBytes());
|
|
||||||
} else {
|
|
||||||
// TODO avoid slicing and just set position when JDK bug is fixed.
|
|
||||||
buffer = buffer.slice(writerOffset(), writableBytes());
|
|
||||||
}
|
|
||||||
return buffer.order(order);
|
return buffer.order(order);
|
||||||
}
|
}
|
||||||
// </editor-fold>
|
// </editor-fold>
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long nativeAddress() {
|
public long nativeAddress() {
|
||||||
try {
|
if (seg.isNative()) {
|
||||||
return seg.address().toRawLongValue();
|
return seg.address().toRawLongValue();
|
||||||
} catch (UnsupportedOperationException e) {
|
|
||||||
return 0; // This is a heap segment.
|
|
||||||
}
|
}
|
||||||
|
return 0; // This is a heap segment.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user