diff --git a/akka-actor/src/main/scala/akka/util/Unsafe.java b/akka-actor/src/main/scala/akka/util/Unsafe.java index 82bc459205..e545d1b2af 100644 --- a/akka-actor/src/main/scala/akka/util/Unsafe.java +++ b/akka-actor/src/main/scala/akka/util/Unsafe.java @@ -1,13 +1,30 @@ /** * Copyright (C) 2009-2015 Typesafe Inc. */ - - package akka.util; +import java.lang.reflect.Field; + /** * INTERNAL API */ public final class Unsafe { - public final static sun.misc.Unsafe instance = scala.concurrent.util.Unsafe.instance; + public final static sun.misc.Unsafe instance; + + static { + try { + sun.misc.Unsafe found = null; + for (Field field : sun.misc.Unsafe.class.getDeclaredFields()) { + if (field.getType() == sun.misc.Unsafe.class) { + field.setAccessible(true); + found = (sun.misc.Unsafe) field.get(null); + break; + } + } + if (found == null) throw new IllegalStateException("Can't find instance of sun.misc.Unsafe"); + else instance = found; + } catch (Throwable t) { + throw new ExceptionInInitializerError(t); + } + } }