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

Stefan Karlsson stefank at openjdk.org
Mon Oct 13 06:22:50 UTC 2025


On Mon, 13 Oct 2025 06:19:45 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 incrementally with one additional commit since the last revision:
> 
>   Fix typo
>   
>   Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>

Marked as reviewed by stefank (Reviewer).

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

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


More information about the hotspot-dev mailing list