RFR: 8298371: monitors_on_stack extracts unprocessed oops

Stefan Karlsson stefank at openjdk.org
Thu Dec 8 10:38:16 UTC 2022


While investigating JDK-8298058 we've found that monitors_on_stack extracts oops without setting up the RegisterMap to process oops. This then leaks out stale oops.

A simple fix is to change the RegisterMap to perform oops processing. However, monitors_on_stack is only used in an assert, so this means that we'll get a difference in behavior between release builds and debug builds. This has the potential to hide bugs in debug builds. It has been suggested to me that it might be better to simply remove the assert:

  assert(monitors_on_stack(current) == ((current->held_monitor_count() - current->jni_monitor_count()) > 0),
         "Held monitor count and locks on stack invariant: " INT64_FORMAT " JNI: " INT64_FORMAT, (int64_t)current->held_monitor_count(), (int64_t)current->jni_monitor_count());


The suggested patch just turns on processing, but I'm also fine with removing the assert if that seems to be a better solution.

Tested with reproducer using Fuzz.java + ZGC

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

Commit messages:
 - 8298371: monitors_on_stack extracts unprocessed oops

Changes: https://git.openjdk.org/jdk/pull/11582/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11582&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8298371
  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/11582.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11582/head:pull/11582

PR: https://git.openjdk.org/jdk/pull/11582


More information about the hotspot-runtime-dev mailing list