Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8205849 | 11.0.1 | Per Liden | P3 | Resolved | Fixed | team |
In ZHeapIteratorRootOopClosure::do_oop() we're using RootAccess<>::oop_load() to load oops. However, as the comment right above that line suggests, that's incorrect and we should have a load barrier here. In fact, we used to have a load barrier here, but this was for some mysterious reason changed. We should revert back to the code that used to be there.
diff --git a/src/hotspot/share/gc/z/zHeapIterator.cpp b/src/hotspot/share/gc/z/zHeapIterator.cpp
--- a/src/hotspot/share/gc/z/zHeapIterator.cpp
+++ b/src/hotspot/share/gc/z/zHeapIterator.cpp
@@ -63,7 +63,7 @@
virtual void do_oop(oop* p) {
// Load barrier needed here for the same reason we
// need fixup_partial_loads() in ZHeap::mark_end()
- const oop obj = RootAccess<>::oop_load(p);
+ const oop obj = ZBarrier::load_barrier_on_oop_field(p);
_iter->push(obj);
_iter->drain(_cl);
}
diff --git a/src/hotspot/share/gc/z/zHeapIterator.cpp b/src/hotspot/share/gc/z/zHeapIterator.cpp
--- a/src/hotspot/share/gc/z/zHeapIterator.cpp
+++ b/src/hotspot/share/gc/z/zHeapIterator.cpp
@@ -63,7 +63,7 @@
virtual void do_oop(oop* p) {
// Load barrier needed here for the same reason we
// need fixup_partial_loads() in ZHeap::mark_end()
- const oop obj = RootAccess<>::oop_load(p);
+ const oop obj = ZBarrier::load_barrier_on_oop_field(p);
_iter->push(obj);
_iter->drain(_cl);
}
- backported by
-
JDK-8205849 ZGC: Incorrect use of RootAccess in ZHeapIterator
-
- Resolved
-