On Mon, 27 Sep 2021 09:39:59 GMT, Per Liden <[email protected]> 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