From 124ad73c00d643445653ad9a0d424b50316df1c6 Mon Sep 17 00:00:00 2001
Date: Fri, 22 Jan 2021 15:25:45 +0800
Subject: PS GC: adding acquire_size method for

Summary: GC: adding acquire_size method for PSParallelCompact::mark_obj.
LLT: NA
Bug url:
---
 .../gc_implementation/parallelScavenge/psParallelCompact.hpp  | 2 +-
 hotspot/src/share/vm/oops/oop.hpp                             | 2 +-
 hotspot/src/share/vm/oops/oop.inline.hpp                      | 4 ++++
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
index 881f380ce..f971383a0 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
@@ -1326,7 +1326,7 @@ class PSParallelCompact : AllStatic {
 };
 
 inline bool PSParallelCompact::mark_obj(oop obj) {
-  const int obj_size = obj->size();
+  const int obj_size = obj->acquire_size();
   if (mark_bitmap()->mark_obj(obj, obj_size)) {
     _summary_data.add_obj(obj, obj_size);
     return true;
diff --git a/hotspot/src/share/vm/oops/oop.hpp b/hotspot/src/share/vm/oops/oop.hpp
index 97d44c046..a5ff97260 100644
--- a/hotspot/src/share/vm/oops/oop.hpp
+++ b/hotspot/src/share/vm/oops/oop.hpp
@@ -105,7 +105,7 @@ class oopDesc {
 
   // Returns the actual oop size of the object
   int size();
-
+  int acquire_size();
   // Sometimes (for complicated concurrency-related reasons), it is useful
   // to be able to figure out the size of an object knowing its klass.
   int size_given_klass(Klass* klass);
diff --git a/hotspot/src/share/vm/oops/oop.inline.hpp b/hotspot/src/share/vm/oops/oop.inline.hpp
index 2ba94158f..7e03033b0 100644
--- a/hotspot/src/share/vm/oops/oop.inline.hpp
+++ b/hotspot/src/share/vm/oops/oop.inline.hpp
@@ -551,6 +551,10 @@ inline int oopDesc::size()  {
   return size_given_klass(klass());
 }
 
+inline int oopDesc::acquire_size()  {
+  return size_given_klass(klass_or_null_acquire());
+}
+
 inline void update_barrier_set(void* p, oop v, bool release = false) {
   assert(oopDesc::bs() != NULL, "Uninitialized bs in oop!");
   oopDesc::bs()->write_ref_field(p, v, release);
-- 
2.19.0