RFR: 8358958: (aio) AsynchronousByteChannel.read/write should throw IAE if buffer is thread-confined

Alan Bateman alanb at openjdk.org
Tue Jun 10 07:48:54 UTC 2025


It's nonsensical to invoke read/write methods defined by the AsynchronousXXX channels with buffers that are views of memory segments allocated from a thread-confined arena.

For AsynchronousSocketChannel, the current behavior is for the read/write methods to initiate an I/O operation that completes with an IOException and an IllegalStateException as cause. For AsynchronousFileChannel, the current behavior is for the read/write methods to initiate an I/O operation that never completes (a thread in the channel groups terminates with a WrongThreadException).

The proposal is that the read/write methods reject, with IllegalArgumentException, any attempt to initiate as async I/O operation with a buffer from a thread-confined arena. IAE is already declared to be thrown for read-only buffers or attempting a positional read/write with a negative file position.

The java/nio/channels/etc/MemorySegments.java test is updated to test AsynchronousSocketChannel and AsynchronousFileChannel with buffers from all arena kinds. The tests include attempts to close a shared arena while an I/O operation is in progress. For now, the testAsyncFileChannelXXX tests are disabled until they meet up with the changes in JDK-8357847 (pr/25531).

-------------

Commit messages:
 - Merge branch 'master' into JDK-8358958
 - Drop links to problematic operations from asByteBuffer method description
 - Disable testAsyncFileChannelReadWrite on Windows for now
 - Add test for async close of arena
 - Initial commit

Changes: https://git.openjdk.org/jdk/pull/25691/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25691&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8358958
  Stats: 434 lines in 8 files changed: 409 ins; 3 del; 22 mod
  Patch: https://git.openjdk.org/jdk/pull/25691.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25691/head:pull/25691

PR: https://git.openjdk.org/jdk/pull/25691


More information about the nio-dev mailing list