src/java.base/share/classes/java/net/InetAddress.java
changeset 49531 e8ada9b2dd89
parent 47747 84e7c1515661
child 49926 b7c2996d690b
--- a/src/java.base/share/classes/java/net/InetAddress.java	Thu Apr 05 09:36:01 2018 -0700
+++ b/src/java.base/share/classes/java/net/InetAddress.java	Thu Apr 05 09:37:19 2018 -0700
@@ -290,7 +290,10 @@
     /* Used to store the name service provider */
     private static transient NameService nameService = null;
 
-    /* Used to store the best available hostname */
+    /**
+     * Used to store the best available hostname.
+     * Lazily initialized via a data race; safe because Strings are immutable.
+     */
     private transient String canonicalHostName = null;
 
     /** use serialVersionUID from JDK 1.0.2 for interoperability */
@@ -622,11 +625,11 @@
      * @since 1.4
      */
     public String getCanonicalHostName() {
-        if (canonicalHostName == null) {
-            canonicalHostName =
+        String value = canonicalHostName;
+        if (value == null)
+            canonicalHostName = value =
                 InetAddress.getHostFromNameService(this, true);
-        }
-        return canonicalHostName;
+        return value;
     }
 
     /**