RFR: 8254874: ZGC: JNIHandleBlock verification failure in stack watermark processing

Stefan Karlsson stefank at openjdk.java.net
Fri Oct 16 14:39:20 UTC 2020


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.

-------------

Commit messages:
 - 8254874: ZGC: JNIHandleBlock verification failure in stack watermark processing

Changes: https://git.openjdk.java.net/jdk/pull/701/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=701&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8254874
  Stats: 5 lines in 1 file changed: 5 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/701.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/701/head:pull/701

PR: https://git.openjdk.java.net/jdk/pull/701


More information about the serviceability-dev mailing list