RFR: JDK-8263467: Incorrect double-checked locking in sun.java2d.CRenderer [v2]

Andrey Turbanov aturbanov at openjdk.org
Mon Sep 19 07:14:57 UTC 2022


On Fri, 12 Mar 2021 07:22:26 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> SonarCloud reports multiple incorrect double-checked locking cases in `sun.java2d.CRenderer`. For example:
>> 
>> 
>>   Arc2D arcToShape;
>> 
>>   ...
>>             if (arcToShape == null) {
>>                 synchronized (this) {
>>                     if (arcToShape == null) {
>>                         arcToShape = new Arc2D.Float();
>>                     }
>>                 }
>>             }
>> 
>> 
>> `Arc2D` contains fields that are not `final`. `arcToShape` is not `volatile`. This makes it an incorrect DCL.
>> This code is used by Mac OS, do it would probably blow up some time later on M1.
>> 
>> This is the candidate fix that preserves the semantics. I am doing this fix blindly so far, without testing on real Mac OS. But maybe there is no need to do any of this, because the setter methods overwrite the contents of all these objects under their own sync. So, maybe we can just allocate those objects without DCL-backed caching and pass them in?
>
> Aleksey Shipilev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Drop DCL and useless synchronization completely

Seems this PR was lost for some reason.
@shipilev can you please reopen it?

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

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



More information about the client-libs-dev mailing list