On Tue, 20 May 2025 10:51:13 GMT, Per Minborg <pminb...@openjdk.org> wrote:
> This PR proposes to use `JavaNioAccess::getBufferAdress` rather than > `DirectBuffer::address` so that `Buffer` instances backed by MemorySegment > instances can be used in classes that were not covered by > https://github.com/openjdk/jdk/pull/25321 > > In some of the cases, this is not strictly needed as the internal cache in > `sun.nio.ch.Util#getTemporaryDirectBuffer` is (currently) only returning > Buffers that are not backed by a `MemorySegment`. Also, we now always > acquire/release buffer sessions before interacting with memory. Again, this > is not always needed for temporary direct buffers but provides a consistent > handling of buffers at a minimal cost. > > This PR passes tier1, tier2, and tier3 tests on multiple platforms and > configurations. src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java line 254: > 252: ByteBuffer dst = Util.getTemporaryDirectBuffer(len); > 253: assert dst.position() == 0; > 254: NIO_ACCESS.acquireSession(dst); Not strictly needed, but is proposed for consistency. src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java line 459: > 457: > 458: boolean pending = false; > 459: NIO_ACCESS.acquireSession(buf); Here, we acquire the session *after* we have obtained the address. This is safe as we do not touch the segment before it is acquired. If a segment is deallocated before we try to acquire the session, an exception will be thrown. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25324#discussion_r2097665536 PR Review Comment: https://git.openjdk.org/jdk/pull/25324#discussion_r2097670174