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