RFR: 8332506: SIGFPE In ObjectSynchronizer::is_async_deflation_needed()

Fredrik Bredberg fbredberg at openjdk.org
Wed Dec 18 18:26:06 UTC 2024


This PR solves a division by zero problem, that according to the bug report happened in `ObjectSynchronizer::is_async_deflation_needed()`. As it turns out it really happened in the inlined  `monitors_used_above_threshold()` function. The problematic line looked like this:

`size_t monitor_usage = (monitors_used * 100LL) / ceiling;`

Unfortunately the `ceiling` value was increased every time there where too many deflations without any progress. This whould eventually lead to an overflow in the `ceiling` value, and in unlucky circumstances, it would become zero. Thus causing a division by zero crash.

This PR makes sure not to increase the `ceiling` value if `monitor_usage` is below the `MonitorUsedDeflationThreshold`.
It also makes sure the ceiling value is never zero, and does not wrap around.

Tested okay in tier1-5 and `test/hotspot/jtreg/runtime/Monitor/MonitorUsedDeflationThresholdTest.java`

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

Commit messages:
 - 8332506: SIGFPE In ObjectSynchronizer::is_async_deflation_needed() causing JVM Crash

Changes: https://git.openjdk.org/jdk/pull/22815/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22815&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8332506
  Stats: 42 lines in 1 file changed: 23 ins; 14 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/22815.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22815/head:pull/22815

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


More information about the hotspot-runtime-dev mailing list