> 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
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/2948/files
- new: https://git.openjdk.java.net/jdk/pull/2948/files/c81b9ea2..d912f559
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2948&range=01
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2948&range=00-01
Stats: 80 lines in 1 file changed: 0 ins; 70 del; 10 mod
Patch: https://git.openjdk.java.net/jdk/pull/2948.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/2948/head:pull/2948
PR: https://git.openjdk.java.net/jdk/pull/2948