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

Axel Boldt-Christmas aboldtch at openjdk.org
Mon Oct 13 12:20:23 UTC 2025


On Thu, 9 Oct 2025 06:18:14 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:

> 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.

This pull request has now been integrated.

Changeset: d47e6b71
Author:    Axel Boldt-Christmas <aboldtch at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/d47e6b713c77d9e2f477f05291e8772129a5471c
Stats:     65 lines in 4 files changed: 25 ins; 17 del; 23 mod

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

Reviewed-by: dholmes, stefank

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

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


More information about the hotspot-dev mailing list