System.console looks like double checked locking, but there's no second check.
--- a/src/java.base/share/classes/java/lang/System.java
+++ b/src/java.base/share/classes/java/lang/System.java
@@ -236,10 +236,12 @@
* @since 1.6
*/
public static Console console() {
- Console c = cons;
- if (c == null) {
+ Console c;
+ if ((c = cons) == null) {
synchronized (System.class) {
- cons = c = SharedSecrets.getJavaIOAccess().console();
+ if ((c = cons) == null) {
+ cons = c = SharedSecrets.getJavaIOAccess().console();
+ }
}
}
return c;
http://cr.openjdk.java.net/~martin/webrevs/openjdk9/Console-double-checked-locking/
--- a/src/java.base/share/classes/java/lang/System.java
+++ b/src/java.base/share/classes/java/lang/System.java
@@ -236,10 +236,12 @@
* @since 1.6
*/
public static Console console() {
- Console c = cons;
- if (c == null) {
+ Console c;
+ if ((c = cons) == null) {
synchronized (System.class) {
- cons = c = SharedSecrets.getJavaIOAccess().console();
+ if ((c = cons) == null) {
+ cons = c = SharedSecrets.getJavaIOAccess().console();
+ }
}
}
return c;
http://cr.openjdk.java.net/~martin/webrevs/openjdk9/Console-double-checked-locking/