RFR: 8369469: Rdtsc: Remove potential races in Rdtsc::initialize

Axel Boldt-Christmas aboldtch at openjdk.org
Thu Oct 9 06:25:36 UTC 2025


The whole chain of Rdtsc uses static block scope variables which are guaranteed to be constructed only once (implements some sort of double checked locking).
However the current implementation does not do this correctly in all places, where it does:

  static bool initialized = false;
  if (!initialized) {
    ...
    initialized = true;
  }

It should do

static bool initialized = initialize_impl(); // Do the logic inside a function call

to guarantee that initialize is only called once.

We have observed this from some GC threads if we start using Ticks to early.

The suggested patch makes `Rdtsc::initialize` private an is only called from the `Rdtsc::enabled` which uses a static bock scoped variable to ensure the call once semantics. The property called from outside is now  `Rdtsc::enabled`. Which is more true to what how it is used on all call sites.

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

Depends on: https://git.openjdk.org/jdk/pull/27711

Commit messages:
 - 8369469: Rdtsc: Remove potential races in Rdtsc::initialize

Changes: https://git.openjdk.org/jdk/pull/27712/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27712&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8369469
  Stats: 65 lines in 4 files changed: 25 ins; 17 del; 23 mod
  Patch: https://git.openjdk.org/jdk/pull/27712.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27712/head:pull/27712

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


More information about the hotspot-dev mailing list