diff --git a/src/java.base/share/classes/jdk/internal/foreign/Utils.java b/src/java.base/share/classes/jdk/internal/foreign/Utils.java index dc803960c3b7c..0c43fefa28469 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/Utils.java +++ b/src/java.base/share/classes/jdk/internal/foreign/Utils.java @@ -146,7 +146,7 @@ public static void copy(MemorySegment addr, byte[] bytes) { } public static MemorySegment toCString(byte[] bytes, SegmentAllocator allocator) { - MemorySegment addr = allocator.allocate(bytes.length + 1, 1L); + MemorySegment addr = allocator.allocate(bytes.length + 1); copy(addr, bytes); return addr; } diff --git a/test/jdk/java/foreign/TestSegmentAllocators.java b/test/jdk/java/foreign/TestSegmentAllocators.java index 7bcba567672c8..1bbb7014cc46a 100644 --- a/test/jdk/java/foreign/TestSegmentAllocators.java +++ b/test/jdk/java/foreign/TestSegmentAllocators.java @@ -185,6 +185,25 @@ public MemorySegment allocateArray(MemoryLayout elementLayout, long count) { assertEquals(calls.get(), 7); } + @Test + public void testStringAllocateDelegation() { + AtomicInteger calls = new AtomicInteger(); + SegmentAllocator allocator = new SegmentAllocator() { + @Override + public MemorySegment allocate(long bytesSize, long bytesAlignment) { + return MemorySegment.allocateNative(bytesSize, bytesAlignment, MemorySession.openImplicit()); + } + + @Override + public MemorySegment allocate(long size) { + calls.incrementAndGet(); + return allocate(size, 1); + }; + }; + allocator.allocateUtf8String("Hello"); + assertEquals(calls.get(), 1); + } + @Test(dataProvider = "arrayAllocations") public void testArray(AllocationFactory allocationFactory, ValueLayout layout, AllocationFunction allocationFunction, ToArrayHelper arrayHelper) {