797 |
|
new PaddedAtomicReference<Node<E>>(null)); |
798 |
|
} |
799 |
|
|
800 |
– |
|
800 |
|
// Unsafe mechanics |
802 |
– |
private static long fieldOffset(String fieldName, Class<?> klazz) { |
803 |
– |
try { |
804 |
– |
return UNSAFE.objectFieldOffset(klazz.getDeclaredField(fieldName)); |
805 |
– |
} catch (NoSuchFieldException e) { |
806 |
– |
// Convert Exception to Error |
807 |
– |
NoSuchFieldError error = new NoSuchFieldError(fieldName); |
808 |
– |
error.initCause(e); |
809 |
– |
throw error; |
810 |
– |
} |
811 |
– |
} |
801 |
|
|
802 |
|
private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe(); |
803 |
|
private static final long headOffset = |
804 |
< |
fieldOffset("head", LinkedTransferQueue.class); |
804 |
> |
objectFieldOffset("head", LinkedTransferQueue.class); |
805 |
|
private static final long tailOffset = |
806 |
< |
fieldOffset("tail", LinkedTransferQueue.class); |
806 |
> |
objectFieldOffset("tail", LinkedTransferQueue.class); |
807 |
|
private static final long cleanMeOffset = |
808 |
< |
fieldOffset("cleanMe", LinkedTransferQueue.class); |
808 |
> |
objectFieldOffset("cleanMe", LinkedTransferQueue.class); |
809 |
|
|
810 |
+ |
private static long objectFieldOffset(String field, Class<?> klazz) { |
811 |
+ |
try { |
812 |
+ |
return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field)); |
813 |
+ |
} catch (NoSuchFieldException e) { |
814 |
+ |
// Convert Exception to corresponding Error |
815 |
+ |
NoSuchFieldError error = new NoSuchFieldError(field); |
816 |
+ |
error.initCause(e); |
817 |
+ |
throw error; |
818 |
+ |
} |
819 |
+ |
} |
820 |
|
} |