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