diff --git a/src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java b/src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java index 9a316cd5825..54042c842b7 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java +++ b/src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java @@ -125,7 +125,7 @@ public abstract sealed class AbstractMemorySegmentImpl public final MemorySegment reinterpret(long newSize, Arena arena, Consumer cleanup) { Objects.requireNonNull(arena); return reinterpretInternal(Reflection.getCallerClass(), newSize, - MemorySessionImpl.toMemorySession(arena), null); + MemorySessionImpl.toMemorySession(arena), cleanup); } @Override diff --git a/test/jdk/java/foreign/TestSegments.java b/test/jdk/java/foreign/TestSegments.java index 3a2d85a5eac..3775d8eb525 100644 --- a/test/jdk/java/foreign/TestSegments.java +++ b/test/jdk/java/foreign/TestSegments.java @@ -36,6 +36,7 @@ import org.testng.annotations.Test; import java.lang.invoke.VarHandle; import java.nio.ByteBuffer; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.function.IntFunction; import java.util.function.Supplier; @@ -352,6 +353,20 @@ public class TestSegments { assertEquals(end.address(), segment.byteSize()); // end address should be equal to segment byte size } + @Test + void testReinterpret() { + AtomicInteger counter = new AtomicInteger(); + try (Arena arena = Arena.ofConfined()){ + // check size + assertEquals(MemorySegment.ofAddress(42).reinterpret(100).byteSize(), 100); + assertEquals(MemorySegment.ofAddress(42).reinterpret(100, Arena.ofAuto(), null).byteSize(), 100); + // check scope and cleanup + assertEquals(MemorySegment.ofAddress(42).reinterpret(100, arena, s -> counter.incrementAndGet()).scope(), arena.scope()); + assertEquals(MemorySegment.ofAddress(42).reinterpret(arena, s -> counter.incrementAndGet()).scope(), arena.scope()); + } + assertEquals(counter.get(), 2); + } + @DataProvider(name = "badSizeAndAlignments") public Object[][] sizesAndAlignments() { return new Object[][] {