RFR: 8369469: Rdtsc: Remove potential races in Rdtsc::initialize [v2]

Axel Boldt-Christmas aboldtch at openjdk.org
Mon Oct 13 06:22:49 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.

Axel Boldt-Christmas has updated the pull request incrementally with one additional commit since the last revision:

  Fix typo
  
  Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/27712/files
  - new: https://git.openjdk.org/jdk/pull/27712/files/93e2d96a..d9524470

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=27712&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27712&range=00-01

  Stats: 3 lines in 2 files changed: 0 ins; 0 del; 3 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