This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new fc51f0e4327 IGNITE-19652 Adapt to DirectByteBuffer ctor changes in JDK 
21 (#10764)
fc51f0e4327 is described below

commit fc51f0e43275953ab6a77c7f4d10ba32d1a640b6
Author: Mateusz "Serafin" Gajewski <git...@wendigo.pl>
AuthorDate: Thu Jun 15 10:43:56 2023 +0200

    IGNITE-19652 Adapt to DirectByteBuffer ctor changes in JDK 21 (#10764)
    
    Signature has changed in 
https://github.com/openjdk/jdk/commit/a56598f5a534cc9223367e7faa8433ea38661db9
---
 .../main/java/org/apache/ignite/internal/util/GridUnsafe.java  | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
index 9f4608a1f01..ef215493cac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
@@ -114,6 +114,9 @@ public abstract class GridUnsafe {
     /** {@link java.nio.Buffer#address} field offset. */
     private static final long DIRECT_BUF_ADDR_OFF = bufferAddressOffset();
 
+    /** Whether to use newDirectByteBuffer(long, long) constructor */
+    private static final boolean IS_DIRECT_BUF_LONG_CAP = 
majorJavaVersion(jdkVersion()) >= 21;
+
     /** Cleaner code for direct {@code java.nio.ByteBuffer}. */
     private static final DirectBufferCleaner DIRECT_BUF_CLEANER =
         majorJavaVersion(jdkVersion()) < 9
@@ -1641,7 +1644,8 @@ public abstract class GridUnsafe {
         try {
             Class<?> cls = nioAccessObj.getClass();
 
-            Method mtd = cls.getMethod("newDirectByteBuffer", long.class, 
int.class, Object.class);
+            Method mtd = IS_DIRECT_BUF_LONG_CAP ? 
cls.getMethod("newDirectByteBuffer", long.class, long.class, Object.class) :
+                    cls.getMethod("newDirectByteBuffer", long.class, 
int.class, Object.class);
 
             mtd.setAccessible(true);
 
@@ -1660,7 +1664,6 @@ public abstract class GridUnsafe {
         return javaVer < 9 ? "sun" : "jdk.internal";
     }
 
-
     /**
      * Creates and tests contructor for Direct ByteBuffer. Test is wrapping 
one-byte unsafe memory into a buffer.
      *
@@ -1696,7 +1699,8 @@ public abstract class GridUnsafe {
         try {
             ByteBuffer buf = 
ByteBuffer.allocateDirect(1).order(NATIVE_BYTE_ORDER);
 
-            Constructor<?> ctor = 
buf.getClass().getDeclaredConstructor(long.class, int.class);
+            Constructor<?> ctor = IS_DIRECT_BUF_LONG_CAP ? 
buf.getClass().getDeclaredConstructor(long.class, long.class) :
+                    buf.getClass().getDeclaredConstructor(long.class, 
int.class);
 
             ctor.setAccessible(true);
 

Reply via email to