]> granicus.if.org Git - icu/commitdiff
ICU-12562 Applied the fix equivalent to the android patch to resolve TimeZone#getDefa...
authorYoshito Umaoka <y.umaoka@gmail.com>
Wed, 15 Mar 2017 01:27:58 +0000 (01:27 +0000)
committerYoshito Umaoka <y.umaoka@gmail.com>
Wed, 15 Mar 2017 01:27:58 +0000 (01:27 +0000)
X-SVN-Rev: 39809

icu4j/main/classes/core/src/com/ibm/icu/util/TimeZone.java

index 02c05a097d5a7a36b9a7ca4b3d05e1bc1d4b5964..c10d3ffd8b08267e8a9ffa56675add48e652eb9d 100644 (file)
@@ -927,19 +927,28 @@ abstract public class TimeZone implements Serializable, Cloneable, Freezable<Tim
      * @stable ICU 2.0
      */
     public static TimeZone getDefault() {
-        if (defaultZone == null) {
-            synchronized(TimeZone.class) {
-                if (defaultZone == null) {
-                    if (TZ_IMPL == TIMEZONE_JDK) {
-                        defaultZone = new JavaTimeZone();
-                    } else {
-                        java.util.TimeZone temp = java.util.TimeZone.getDefault();
-                        defaultZone = getFrozenTimeZone(temp.getID());
+        // Copy the reference to the current defaultZone,
+        // so it won't be affected by setDefault().
+        TimeZone tmpDefaultZone = defaultZone;
+
+        if (tmpDefaultZone == null) {
+            synchronized (java.util.TimeZone.class) {
+                synchronized(TimeZone.class) {
+                    tmpDefaultZone = defaultZone;
+                    if (tmpDefaultZone == null) {
+                        if (TZ_IMPL == TIMEZONE_JDK) {
+                            tmpDefaultZone = new JavaTimeZone();
+                        } else {
+                            java.util.TimeZone temp = java.util.TimeZone.getDefault();
+                            tmpDefaultZone = getFrozenTimeZone(temp.getID());
+                        }
+                        defaultZone = tmpDefaultZone;
                     }
                 }
             }
         }
-        return defaultZone.cloneAsThawed();
+
+        return tmpDefaultZone.cloneAsThawed();
     }
 
     /**