src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp
changeset 59296 9186be5c78ba
parent 53953 235b0e817c32
--- a/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp	Wed Nov 27 06:36:41 2019 -0800
+++ b/src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp	Wed Nov 27 11:52:57 2019 -0500
@@ -26,6 +26,7 @@
 
 #include "gc/shared/plab.hpp"
 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
+#include "gc/shenandoah/shenandoahCodeRoots.hpp"
 #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
 #include "runtime/thread.hpp"
 #include "utilities/debug.hpp"
@@ -43,6 +44,7 @@
   size_t _gclab_size;
   uint  _worker_id;
   bool _force_satb_flush;
+  int  _disarmed_value;
 
   ShenandoahThreadLocalData() :
     _gc_state(0),
@@ -125,6 +127,7 @@
     assert(data(thread)->_gclab == NULL, "Only initialize once");
     data(thread)->_gclab = new PLAB(PLAB::min_size());
     data(thread)->_gclab_size = 0;
+    data(thread)->_disarmed_value = ShenandoahCodeRoots::disarmed_value();
   }
 
   static PLAB* gclab(Thread* thread) {
@@ -139,6 +142,10 @@
     data(thread)->_gclab_size = v;
   }
 
+  static void set_disarmed_value(Thread* thread, int value) {
+    data(thread)->_disarmed_value = value;
+  }
+
 #ifdef ASSERT
   static void set_evac_allowed(Thread* thread, bool evac_allowed) {
     if (evac_allowed) {
@@ -170,6 +177,9 @@
     return Thread::gc_data_offset() + byte_offset_of(ShenandoahThreadLocalData, _gc_state);
   }
 
+  static ByteSize disarmed_value_offset() {
+    return Thread::gc_data_offset() + byte_offset_of(ShenandoahThreadLocalData, _disarmed_value);
+  }
 };
 
 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP