From e493e2eb69ce6803a6a4d6d8cbe8e903fbc3148f Mon Sep 17 00:00:00 2001
From: maximthomas <maxim.thomas@gmail.com>
Date: Wed, 26 Feb 2020 07:58:13 +0000
Subject: [PATCH] Merge branch 'master' into security_scan
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java | 34 ++++++++++++++++++++++------------
1 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
index 3bfa144..2483cc6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
@@ -2955,18 +2955,28 @@
{
Method tmpDirectBufferCleanerMethod = null;
Method tmpDirectBufferCleanerCleanMethod = null;
- boolean tmpCleanSupported;
- try
- {
- tmpDirectBufferCleanerMethod = Class.forName("java.nio.DirectByteBuffer").getMethod("cleaner");
- tmpDirectBufferCleanerMethod.setAccessible(true);
- tmpDirectBufferCleanerCleanMethod = Class.forName("sun.misc.Cleaner").getMethod("clean");
- tmpDirectBufferCleanerCleanMethod.setAccessible(true);
- tmpCleanSupported = true;
- }
- catch (Exception e)
- {
- tmpCleanSupported = false;
+ boolean tmpCleanSupported = false;
+ //
+ // We know that this will fail in Java 9+ since sun.misc.Cleaner was moved to jdk.internal.ref.Cleaner (see JDK-8148117)
+ // Also in Java9+, calling 'setAccessible(true)' to Java internal classes generates warnings:
+ // * WARNING: An illegal reflective access operation has occurred
+ // * WARNING: All illegal access operations will be denied in a future release
+ // unless the JVM is started with the 'add-opens=java.base/java.nio=ALL-UNNAMED' flag
+ // Since this is only an optimization, avoid it completely in Java 9+
+ //
+ if (System.getProperty("java.version").startsWith("1.")) {
+ try
+ {
+ tmpDirectBufferCleanerMethod = Class.forName("java.nio.DirectByteBuffer").getMethod("cleaner");
+ tmpDirectBufferCleanerMethod.setAccessible(true);
+ tmpDirectBufferCleanerCleanMethod = Class.forName("sun.misc.Cleaner").getMethod("clean");
+ tmpDirectBufferCleanerCleanMethod.setAccessible(true);
+ tmpCleanSupported = true;
+ }
+ catch (Exception e)
+ {
+ tmpCleanSupported = false;
+ }
}
CLEAN_SUPPORTED = tmpCleanSupported;
directBufferCleanerMethod = tmpDirectBufferCleanerMethod;
--
Gitblit v1.10.0