src/hotspot/share/gc/z/zMark.cpp
changeset 51803 a16777c0a6c5
parent 51345 31b0e90ddbf0
child 51818 75e4ce0fa1ba
--- a/src/hotspot/share/gc/z/zMark.cpp	Wed Sep 19 09:24:40 2018 -0700
+++ b/src/hotspot/share/gc/z/zMark.cpp	Wed Sep 19 19:12:18 2018 +0200
@@ -117,6 +117,24 @@
   }
 }
 
+class ZMarkRootsIteratorClosure : public ZRootsIteratorClosure {
+public:
+  virtual void do_thread(Thread* thread) {
+    ZRootsIteratorClosure::do_thread(thread);
+
+    // Update thread local address bad mask
+    ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
+  }
+
+  virtual void do_oop(oop* p) {
+    ZBarrier::mark_barrier_on_root_oop_field(p);
+  }
+
+  virtual void do_oop(narrowOop* p) {
+    ShouldNotReachHere();
+  }
+};
+
 class ZMarkRootsTask : public ZTask {
 private:
   ZMark* const   _mark;
@@ -129,7 +147,7 @@
       _roots() {}
 
   virtual void work() {
-    ZMarkRootOopClosure cl;
+    ZMarkRootsIteratorClosure cl;
     _roots.oops_do(&cl);
 
     // Flush and free worker stacks. Needed here since