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]

Reply via email to