Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8263533

(fc) MappedByteBuffer.force() method throws an IOException in a very simple test

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P4 P4
    • 17
    • core-libs
    • None
    • behavioral
    • minimal
    • The methods would throw an unchecked exception instead of an unspecified checked exception so no changes would be needed in calling code.
    • Java API
    • SE

      Summary

      Specify that the java.nio.MappedByteBuffer methods force() and force(int,int) and the jdk.incubator.foreign.MappedMemorySegments method force() throw an UncheckedIOException.

      Problem

      The methods force() and force(int,int) of java.nio.MappedByteBuffer and force() of jdk.incubator.foreign.MappedMemorySegments can throw an IOException from the native layer but this is unspecified behavior.

      Solution

      Catch the IOException and rethrow it as an UncheckedIOException.

      Specification

      --- a/src/java.base/share/classes/java/nio/MappedByteBuffer.java
      +++ b/src/java.base/share/classes/java/nio/MappedByteBuffer.java
      @@ -219,10 +220,14 @@ public abstract class MappedByteBuffer
            * invoking this method may have no effect. In particular, the
            * method has no effect for buffers mapped in read-only or private
            * mapping modes. This method may or may not have an effect for
            * implementation-specific mapping modes. </p>
            *
      +     * @throws UncheckedIOException
      +     *         If an I/O error occurs writing the buffer's content to the
      +     *         storage device containing the mapped file
      +     *
            * @return  This buffer
            */
           public final MappedByteBuffer force() {
      @@ -270,10 +275,14 @@ public abstract class MappedByteBuffer
            *
            * @throws IndexOutOfBoundsException
            *         if the preconditions on the index and length do not
            *         hold.
            *
      +     * @throws UncheckedIOException
      +     *         If an I/O error occurs writing the buffer's content to the
      +     *         storage device containing the mapped file
      +     *
            * @return  This buffer
            *
            * @since 13
            */
           public final MappedByteBuffer force(int index, int length) {
      
      --- a/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MappedMemorySegments.java
      +++ b/src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/MappedMemorySegments.java
      @@ -147,10 +148,11 @@ public final class MappedMemorySegments {
            *
            * @throws IllegalStateException if the given segment is not alive, or if the given segment is confined
            * and this method is called from a thread other than the segment's owner thread.
            * @throws UnsupportedOperationException if the given segment is not a mapped memory segment, e.g. if
            * {@code segment.isMapped() == false}.
      +     * @throws UncheckedIOException if there is an I/O error writing the contents of the segment to the associated storage device
            */
           public static void force(MemorySegment segment) {

            bpb Brian Burkhalter
            ndcosta Nelson Dcosta (Inactive)
            Alan Bateman, Maurizio Cimadamore
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: