On Fri, 12 Mar 2021 07:22:26 GMT, Aleksey Shipilev <[email protected]> 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
Marked as reviewed by azvegint (Reviewer).
-------------
PR: https://git.openjdk.java.net/jdk/pull/2948