--- 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