Skip to content

Commit 599cd11

Browse files
committed
Revert "use reflection instead of relying on sun.misc.Cleaner being available."
This reverts commit 4d793a0.
1 parent 2967a8e commit 599cd11

File tree

1 file changed

+6
-20
lines changed

1 file changed

+6
-20
lines changed

src/com/esotericsoftware/kryo/util/UnsafeUtil.java

+6-20
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323

2424
import java.lang.reflect.Constructor;
2525
import java.lang.reflect.Field;
26-
import java.lang.reflect.Method;
2726
import java.nio.ByteBuffer;
2827
import java.util.Arrays;
2928
import java.util.Comparator;
3029
import java.util.List;
3130

31+
import sun.misc.Cleaner;
3232
import sun.misc.Unsafe;
3333
import sun.nio.ch.DirectBuffer;
3434

@@ -92,18 +92,6 @@ public class UnsafeUtil {
9292
_unsafe = tmpUnsafe;
9393
}
9494

95-
static private Method cleanerMethod, cleanMethod;
96-
static {
97-
try {
98-
cleanerMethod = DirectBuffer.class.getMethod("cleaner");
99-
cleanerMethod.setAccessible(true);
100-
cleanMethod = cleanerMethod.getReturnType().getMethod("clean");
101-
} catch (Exception ex) {
102-
if (DEBUG) debug("kryo", "No direct ByteBuffer clean method is available.", ex);
103-
cleanerMethod = null;
104-
}
105-
}
106-
10795
static {
10896
ByteBuffer buf = ByteBuffer.allocateDirect(1);
10997
try {
@@ -166,13 +154,11 @@ final static public ByteBuffer getDirectBufferAt (long address, int size) {
166154
*
167155
* NOTE: If Cleaner is not accessible due to SecurityManager restrictions, reflection could be used to obtain the "clean"
168156
* method and then invoke it. */
169-
static public void releaseBuffer (ByteBuffer buffer) {
170-
if (!(buffer instanceof DirectBuffer)) return;
171-
if (cleanerMethod != null) {
172-
try {
173-
cleanMethod.invoke(cleanerMethod.invoke(buffer));
174-
} catch (Throwable ignored) {
175-
}
157+
static public void releaseBuffer (ByteBuffer niobuffer) {
158+
if (niobuffer != null && niobuffer.isDirect()) {
159+
Object cleaner = ((DirectBuffer)niobuffer).cleaner();
160+
if (cleaner != null) ((Cleaner)cleaner).clean();
161+
niobuffer = null;
176162
}
177163
}
178164
}

0 commit comments

Comments
 (0)