Skip to content

Commit

Permalink
Fix java.misc.Unsafe probing. Do not re-throw any exceptions.
Browse files Browse the repository at this point in the history
  • Loading branch information
romix committed Nov 25, 2013
1 parent a0913de commit bb40b1f
Showing 1 changed file with 30 additions and 21 deletions.
51 changes: 30 additions & 21 deletions src/com/esotericsoftware/kryo/util/UnsafeUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,34 +39,43 @@ public class UnsafeUtil {


static {
Unsafe tmpUnsafe = null;
long tmpByteArrayBaseOffset = 0;
long tmpFloatArrayBaseOffset = 0;
long tmpDoubleArrayBaseOffset = 0;
long tmpIntArrayBaseOffset = 0;
long tmpLongArrayBaseOffset = 0;
long tmpShortArrayBaseOffset = 0;
long tmpCharArrayBaseOffset = 0;

try {
if (!Util.isAndroid) {
java.lang.reflect.Field field = sun.misc.Unsafe.class
.getDeclaredField("theUnsafe");
java.lang.reflect.Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
_unsafe = (sun.misc.Unsafe) field.get(null);
byteArrayBaseOffset = _unsafe.arrayBaseOffset(byte[].class);
charArrayBaseOffset = _unsafe.arrayBaseOffset(char[].class);
shortArrayBaseOffset = _unsafe.arrayBaseOffset(short[].class);
intArrayBaseOffset = _unsafe.arrayBaseOffset(int[].class);
floatArrayBaseOffset = _unsafe.arrayBaseOffset(float[].class);
longArrayBaseOffset = _unsafe.arrayBaseOffset(long[].class);
doubleArrayBaseOffset = _unsafe.arrayBaseOffset(double[].class);
tmpUnsafe = (sun.misc.Unsafe)field.get(null);
tmpByteArrayBaseOffset = tmpUnsafe.arrayBaseOffset(byte[].class);
tmpCharArrayBaseOffset = tmpUnsafe.arrayBaseOffset(char[].class);
tmpShortArrayBaseOffset = tmpUnsafe.arrayBaseOffset(short[].class);
tmpIntArrayBaseOffset = tmpUnsafe.arrayBaseOffset(int[].class);
tmpFloatArrayBaseOffset = tmpUnsafe.arrayBaseOffset(float[].class);
tmpLongArrayBaseOffset = tmpUnsafe.arrayBaseOffset(long[].class);
tmpDoubleArrayBaseOffset = tmpUnsafe.arrayBaseOffset(double[].class);
} else {
byteArrayBaseOffset = 0;
charArrayBaseOffset = 0;
shortArrayBaseOffset = 0;
intArrayBaseOffset = 0;
floatArrayBaseOffset = 0;
longArrayBaseOffset = 0;
doubleArrayBaseOffset = 0;
_unsafe = null;
if (TRACE)
trace("kryo", "Running on Android platform. Use of java.misc.Unsafe should be disabled");
if (TRACE) trace("kryo", "Running on Android platform. Use of java.misc.Unsafe should be disabled");
}
} catch (java.lang.Exception e) {
throw new RuntimeException(e);
if (TRACE)
trace("kryo", "java.misc.Unsafe is not accessible or not available. Use of java.misc.Unsafe should be disabled");
}

byteArrayBaseOffset = tmpByteArrayBaseOffset;
charArrayBaseOffset = tmpCharArrayBaseOffset;
shortArrayBaseOffset = tmpShortArrayBaseOffset;
intArrayBaseOffset = tmpIntArrayBaseOffset;
floatArrayBaseOffset = tmpFloatArrayBaseOffset;
longArrayBaseOffset = tmpLongArrayBaseOffset;
doubleArrayBaseOffset = tmpDoubleArrayBaseOffset;
_unsafe = tmpUnsafe;
}

static {
Expand Down

0 comments on commit bb40b1f

Please sign in to comment.