This is an automated email from the ASF dual-hosted git repository.
chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
The following commit(s) were added to refs/heads/main by this push:
new 6194c81c fix(java): fix get static field by unsafe (#1380)
6194c81c is described below
commit 6194c81c83088c02d4d18a6b2a292e0ae80b9760
Author: Shawn Yang <[email protected]>
AuthorDate: Tue Feb 20 15:01:35 2024 +0800
fix(java): fix get static field by unsafe (#1380)
fix get static field by unsafe
Closes #1344
---
.../apache/fury/serializer/scala/SingletonCollectionSerializer.java | 4 +++-
.../java/org/apache/fury/serializer/scala/SingletonMapSerializer.java | 4 +++-
.../org/apache/fury/serializer/scala/SingletonObjectSerializer.java | 4 +++-
java/fury-core/src/main/java/org/apache/fury/util/unsafe/_Lookup.java | 3 ++-
4 files changed, 11 insertions(+), 4 deletions(-)
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonCollectionSerializer.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonCollectionSerializer.java
index 07c30c07..82d4a2db 100644
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonCollectionSerializer.java
+++
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonCollectionSerializer.java
@@ -36,6 +36,7 @@ import org.apache.fury.util.Preconditions;
@SuppressWarnings("rawtypes")
public class SingletonCollectionSerializer extends
AbstractCollectionSerializer {
private final Field field;
+ private Object base = null;
private long offset = -1;
public SingletonCollectionSerializer(Fury fury, Class cls) {
@@ -61,8 +62,9 @@ public class SingletonCollectionSerializer extends
AbstractCollectionSerializer
if (offset == -1) {
Preconditions.checkArgument(!GraalvmSupport.isGraalBuildtime());
offset = this.offset = Platform.UNSAFE.staticFieldOffset(field);
+ base = Platform.UNSAFE.staticFieldBase(field);
}
- return Platform.getObject(type, offset);
+ return Platform.getObject(base, offset);
}
@Override
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonMapSerializer.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonMapSerializer.java
index f27f561b..e842b883 100644
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonMapSerializer.java
+++
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonMapSerializer.java
@@ -36,6 +36,7 @@ import org.apache.fury.util.Preconditions;
@SuppressWarnings("rawtypes")
public class SingletonMapSerializer extends AbstractMapSerializer {
private final Field field;
+ private Object base = null;
private long offset = -1;
public SingletonMapSerializer(Fury fury, Class cls) {
@@ -61,8 +62,9 @@ public class SingletonMapSerializer extends
AbstractMapSerializer {
if (offset == -1) {
Preconditions.checkArgument(!GraalvmSupport.isGraalBuildtime());
offset = this.offset = Platform.UNSAFE.staticFieldOffset(field);
+ base = Platform.UNSAFE.staticFieldBase(field);
}
- return Platform.getObject(type, offset);
+ return Platform.getObject(base, offset);
}
@Override
diff --git
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonObjectSerializer.java
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonObjectSerializer.java
index 3399ad02..191a3e54 100644
---
a/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonObjectSerializer.java
+++
b/java/fury-core/src/main/java/org/apache/fury/serializer/scala/SingletonObjectSerializer.java
@@ -34,6 +34,7 @@ import org.apache.fury.util.Preconditions;
@SuppressWarnings("rawtypes")
public class SingletonObjectSerializer extends Serializer {
private final Field field;
+ private Object base = null;
private long offset = -1;
public SingletonObjectSerializer(Fury fury, Class type) {
@@ -54,7 +55,8 @@ public class SingletonObjectSerializer extends Serializer {
if (offset == -1) {
Preconditions.checkArgument(!GraalvmSupport.isGraalBuildtime());
offset = this.offset = Platform.UNSAFE.staticFieldOffset(field);
+ base = Platform.UNSAFE.staticFieldBase(field);
}
- return Platform.getObject(type, offset);
+ return Platform.getObject(base, offset);
}
}
diff --git
a/java/fury-core/src/main/java/org/apache/fury/util/unsafe/_Lookup.java
b/java/fury-core/src/main/java/org/apache/fury/util/unsafe/_Lookup.java
index fb8dd808..adbadd8c 100644
--- a/java/fury-core/src/main/java/org/apache/fury/util/unsafe/_Lookup.java
+++ b/java/fury-core/src/main/java/org/apache/fury/util/unsafe/_Lookup.java
@@ -41,7 +41,8 @@ class _Lookup {
try {
Field implLookup = Lookup.class.getDeclaredField("IMPL_LOOKUP");
long fieldOffset = _JDKAccess.UNSAFE.staticFieldOffset(implLookup);
- trustedLookup = (Lookup) _JDKAccess.UNSAFE.getObject(Lookup.class,
fieldOffset);
+ Object fieldBase = _JDKAccess.UNSAFE.staticFieldBase(implLookup);
+ trustedLookup = (Lookup) _JDKAccess.UNSAFE.getObject(fieldBase,
fieldOffset);
} catch (Throwable ignored) {
// ignored
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]