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 <[email protected]>
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);