On Fri, 16 Oct 2020 14:29:46 GMT, Stefan Karlsson <stef...@openjdk.org> wrote:
> The cm03t001 test creates a local JNI handle in the prepare function. It > later uses that handle from a callback > function, from another thread. When the callback runs, ZGC applies a load > barrier to that handle and self-heals it in > the other threads stack. Later when that thread verifies its stack, during > the start of its stack processing, it finds > that the oop is unexpectedly not "bad". It's invalid to send a local JNI > handle over to another thread: > https://docs.oracle.com/en/java/javase/15/docs/specs/jni/design.html#global-and-local-references > So, my proposed fix is to convert the local handle to a global handle. > > I've tested this with the reproducer in the bug report. The changes look good. It is confusing however that klass is also a local variable in a few functions, hiding the static version from scope, but this is a pre-existing problem. ------------- Marked as reviewed by cjplummer (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/701