Java 17 bug (?) on Windows with MemorySegment.asSlice and offset = 3705032704
    erel at eth.gl 
    erel at eth.gl
       
    Thu May 12 05:38:16 UTC 2022
    
    
  
Hi,
It doesn’t happen on Linux. I’ve tested it with Oracle Java 17.0.3.1 and OpenJDK 17.0.2.
 
Code:
package test.test;
 
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel.MapMode;
import java.nio.file.Path;
 
import jdk.incubator.foreign.MemorySegment;
import jdk.incubator.foreign.ResourceScope;
 
public class Test {
 
      public static void main(String[] args) throws Exception {
            System.out.println(System.getProperty("sun.arch.data.model"));
            System.out.println(System.getProperty("os.arch"));
            System.out.println(System.getProperty("java.version"));
            Path p = Path.of("test.dat");
            RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");
            raf.setLength(8000000000L); //~8gb
            raf.close();
            MemorySegment mappedMemorySegment = MemorySegment.mapFile(p, 0, p.toFile().length(), MapMode.READ_WRITE, ResourceScope.newSharedScope());
            System.out.println("byteSize: " + mappedMemorySegment.byteSize());
            long offset = 3705032702L;
            while (true) {
                  System.out.println("offset: " + offset);
                  MemorySegment target = mappedMemorySegment.asSlice(offset, 1);
                  offset = offset + 1;
                  try {
                        target.force();
                  } catch (Exception e) {
                        e.printStackTrace();
                        return;
                  }
            }
      }
}
 
Output:
WARNING: Using incubator modules: jdk.incubator.foreign
64
amd64
17.0.3.1
byteSize: 8000000000
offset: 3705032702
offset: 3705032703
offset: 3705032704
java.io.UncheckedIOException: java.io.IOException: Attempt to access invalid address
       at java.base/java.nio.MappedMemoryUtils.force(MappedMemoryUtils.java:102)
       at java.base/java.nio.Buffer$1.force(Buffer.java:839)
       at java.base/jdk.internal.misc.ScopedMemoryAccess.forceInternal(ScopedMemoryAccess.java:337)
       at java.base/jdk.internal.misc.ScopedMemoryAccess.force(ScopedMemoryAccess.java:325)
       at jdk.incubator.foreign/jdk.internal.foreign.MappedMemorySegmentImpl.force(MappedMemorySegmentImpl.java:104)
       at test.test.Test.main(Test.java:30)
Caused by: java.io.IOException: Attempt to access invalid address
       at java.base/java.nio.MappedMemoryUtils.force0(Native Method)
       at java.base/java.nio.MappedMemoryUtils.force(MappedMemoryUtils.java:100)
       ... 5 more
 
This is a blocking issue for us. Suggestions will be welcomed.
 
Thanks,
Erel
 
    
    
More information about the panama-dev
mailing list