-
Bug
-
Resolution: Unresolved
-
P3
-
11, 17, 21
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.
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?
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.
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?
- links to
-
Review openjdk/jdk/2948