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

David Holmes dholmes at openjdk.org
Mon Oct 13 10:34:08 UTC 2025


On Mon, 13 Oct 2025 08:11:44 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.
>
> Axel Boldt-Christmas has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
> 
>  - Merge remote-tracking branch 'upstream_jdk/master' into JDK-8369469
>  - Fix typo
>    
>    Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>
>  - 8369469: Rdtsc: Remove potential races in Rdtsc::initialize
>  - 8369468: Rdtsc: Move getCPUIDBrandString_stub into VM_Version stub area

Marked as reviewed by dholmes (Reviewer).

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

PR Review: https://git.openjdk.org/jdk/pull/27712#pullrequestreview-3330911163


More information about the hotspot-dev mailing list