On Thu, 11 Mar 2021 19:13:47 GMT, Aleksey Shipilev <sh...@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?

This pull request has been closed without being integrated.

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

PR: https://git.openjdk.java.net/jdk/pull/2948

Reply via email to