< prev index next >

test/jdk/java/foreign/malloc/TestMixedMallocFree.java

Print this page
*** 21,50 ***
   * questions.
   */
  
  /*
   * @test
   * @requires ((os.arch == "amd64" | os.arch == "x86_64") & sun.arch.data.model == "64") | os.arch == "aarch64"
   * @run testng/othervm --enable-native-access=ALL-UNNAMED TestMixedMallocFree
   */
  
  import jdk.incubator.foreign.CLinker;
  import jdk.incubator.foreign.FunctionDescriptor;
- import jdk.incubator.foreign.MemoryAccess;
  import jdk.incubator.foreign.MemoryAddress;
  import jdk.incubator.foreign.MemorySegment;
  import jdk.incubator.foreign.ResourceScope;
  import jdk.incubator.foreign.SymbolLookup;
  import org.testng.annotations.Test;
  
  import java.lang.invoke.MethodHandle;
- import java.lang.invoke.MethodType;
  
! import static jdk.incubator.foreign.CLinker.*;
  import static org.testng.Assert.assertEquals;
  
! public class TestMixedMallocFree {
  
      static final MethodHandle MH_my_malloc;
  
      static {
          System.loadLibrary("Malloc");
          SymbolLookup MALLOC = SymbolLookup.loaderLookup();
  
!         MH_my_malloc = CLinker.getInstance().downcallHandle(
              MALLOC.lookup("my_malloc").orElseThrow(),
!             MethodType.methodType(MemoryAddress.class, long.class),
-             FunctionDescriptor.of(C_POINTER, C_LONG_LONG));
      }
  
      @Test
      public void testMalloc() throws Throwable {
          MemoryAddress ma = (MemoryAddress) MH_my_malloc.invokeExact(4L);
!         MemorySegment seg = ma.asSegment(4L, ResourceScope.newImplicitScope());
!         MemoryAccess.setInt(seg, 42);
!         assertEquals(MemoryAccess.getInt(seg), 42);
          // Test if this free crashes the VM, which might be the case if we load the wrong default library
          // and end up mixing two allocators together.
!         CLinker.freeMemory(ma);
      }
  
  }
--- 21,48 ---
   * questions.
   */
  
  /*
   * @test
+  * @library ../
   * @requires ((os.arch == "amd64" | os.arch == "x86_64") & sun.arch.data.model == "64") | os.arch == "aarch64"
   * @run testng/othervm --enable-native-access=ALL-UNNAMED TestMixedMallocFree
   */
  
  import jdk.incubator.foreign.CLinker;
  import jdk.incubator.foreign.FunctionDescriptor;
  import jdk.incubator.foreign.MemoryAddress;
  import jdk.incubator.foreign.MemorySegment;
  import jdk.incubator.foreign.ResourceScope;
  import jdk.incubator.foreign.SymbolLookup;
  import org.testng.annotations.Test;
  
  import java.lang.invoke.MethodHandle;
  
! import static jdk.incubator.foreign.ValueLayout.JAVA_INT;
  import static org.testng.Assert.assertEquals;
  
! public class TestMixedMallocFree extends NativeTestHelper {
  
      static final MethodHandle MH_my_malloc;
  
      static {
          System.loadLibrary("Malloc");
          SymbolLookup MALLOC = SymbolLookup.loaderLookup();
  
!         MH_my_malloc = CLinker.systemCLinker().downcallHandle(
              MALLOC.lookup("my_malloc").orElseThrow(),
!                 FunctionDescriptor.of(C_POINTER, C_LONG_LONG));
      }
  
      @Test
      public void testMalloc() throws Throwable {
          MemoryAddress ma = (MemoryAddress) MH_my_malloc.invokeExact(4L);
!         MemorySegment seg = MemorySegment.ofAddressNative(ma, 4L, ResourceScope.newImplicitScope());
!         seg.set(JAVA_INT, 0, 42);
!         assertEquals(seg.get(JAVA_INT, 0), 42);
          // Test if this free crashes the VM, which might be the case if we load the wrong default library
          // and end up mixing two allocators together.
!         freeMemory(ma);
      }
  
  }
< prev index next >