Skip to content

Commit

Permalink
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions truffle/src/main/java/org/jruby/truffle/nodes/ext/ZlibNodes.java
Original file line number Diff line number Diff line change
@@ -28,6 +28,8 @@
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.zip.CRC32;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
@@ -159,11 +161,24 @@ public abstract static class Adler32Node extends CoreMethodArrayArgumentsNode {

static {
try {
final Field f = Adler32.class.getDeclaredField("adler");
f.setAccessible(true);
final Field f = AccessController.doPrivileged(new PrivilegedAction<Field>() {
@Override
public Field run() {
final Field f;

try {
f = Adler32.class.getDeclaredField("adler");
f.setAccessible(true);

return f;
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
});

This comment has been minimized.

Copy link
@eregon

eregon Oct 7, 2015

Member

We should have a helper for this, it's really verbose (compared to Unsafe which is half the code).
Something like UnsafeHolder.fieldOffset() but returning a MethodHandle.

This comment has been minimized.

Copy link
@eregon

eregon Oct 7, 2015

Member

Done in d06d163.


ADLER_PRIVATE_FIELD = MethodHandles.lookup().unreflectSetter(f);
} catch (IllegalAccessException | NoSuchFieldException e) {
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}

0 comments on commit c0be331

Please sign in to comment.