On Mon, 27 Sep 2021 09:39:59 GMT, Per Liden <pli...@openjdk.org> wrote:
> > The root cause for crash in ZGC is that the JNIHandles are processed before > > object iteration. And ZGC would update the JNIHandles at object iteration > > with read barrier. So the crash is cause by accessing the invalid address > > which can be dummy info after zgc, and hence crash. > > The fix here should not be to change the order of stuff, so that heap > iteration happens first, that will just hide the real bug. The real bug is > that the `JNIGlobalsDumper::do_oop()` is missing a load barrier. In other > words, keep the order and just make sure to add a load barrier, like this: > > ``` > void JNIGlobalsDumper::do_oop(oop* obj_p) { > oop o = NativeAccess<AS_NO_KEEPALIVE>::oop_load(obj_p); > ... > ``` Hi Per @pliden , Thanks a lot! Correct!I am just puzzling why the sequency of root type dump is a must as there is no such request in spec, and your suggestion definitely help to answer that, I took the wrong fix and neglect that there is a read barrier missed. I will make the change. BRs, Lin ------------- PR: https://git.openjdk.java.net/jdk/pull/5681