From 17b4db31cbc5c2b4829c2d38b832832b874ae28e Mon Sep 17 00:00:00 2001 From: Maurizio Cimadamore Date: Tue, 12 Jan 2021 21:06:03 +0000 Subject: [PATCH] 8259636: Check for buffer backed by shared segment kicks in in unexpected places Reviewed-by: sundar, alanb, chegar --- .../classes/java/nio/Direct-X-Buffer.java.template | 2 +- test/jdk/java/foreign/TestByteBuffer.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template b/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template index f3e1c8b2248..5257c1e2e59 100644 --- a/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template +++ b/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template @@ -203,7 +203,7 @@ class Direct$Type$Buffer$RW$$BO$ { #if[rw] super(mark, pos, lim, cap, segment); - address = db.address() + off; + address = ((Buffer)db).address + off; #if[byte] cleaner = null; #end[byte] diff --git a/test/jdk/java/foreign/TestByteBuffer.java b/test/jdk/java/foreign/TestByteBuffer.java index 27d7a8a3e00..d5b9b5a040f 100644 --- a/test/jdk/java/foreign/TestByteBuffer.java +++ b/test/jdk/java/foreign/TestByteBuffer.java @@ -64,7 +64,6 @@ import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.function.BiConsumer; @@ -668,6 +667,15 @@ public void buffersAndArraysFromSlices(Supplier segmentSupplier) } } + @Test(dataProvider="segments") + public void viewsFromSharedSegment(Supplier segmentSupplier) { + try (MemorySegment segment = segmentSupplier.get().share()) { + var byteBuffer = segment.asByteBuffer(); + byteBuffer.asReadOnlyBuffer(); + byteBuffer.slice(0, 8); + } + } + @DataProvider(name = "segments") public static Object[][] segments() throws Throwable { return new Object[][] {