From: Mark Davis
Date: Fri, 29 Aug 2014 14:45:47 +0000 (+0000)
Subject: ICU-10467 Fix the freezables with volatile.
X-Git-Tag: milestone-59-0-1~1669
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8380296252813af292710bd965bc1a7dc441e7f;p=icu
ICU-10467 Fix the freezables with volatile.
X-SVN-Rev: 36288
---
diff --git a/icu4j/main/classes/collate/src/com/ibm/icu/util/GlobalizationPreferences.java b/icu4j/main/classes/collate/src/com/ibm/icu/util/GlobalizationPreferences.java
index d233fe5a25e..9ea6dcea89e 100644
--- a/icu4j/main/classes/collate/src/com/ibm/icu/util/GlobalizationPreferences.java
+++ b/icu4j/main/classes/collate/src/com/ibm/icu/util/GlobalizationPreferences.java
@@ -1476,7 +1476,7 @@ public class GlobalizationPreferences implements Freezable
- * protected boolean immutable; + * protected volatile boolean frozen; // WARNING: must be volatile ** *
@@ -171,7 +171,7 @@ package com.ibm.icu.util; * }; * * public A freeze() { - * frozen = true; + * frozen = true; // WARNING: must be final statement before return * return this; * } * @@ -245,7 +245,8 @@ package com.ibm.icu.util; * fields frozen, and set the frozen flag. Any subsequent getter/setter will * work properly. Here is an example: *
- * + *Warning! The 'frozen' boolean MUST be volatile, and must be set as the last statement + * in the method.
** public A freeze() { * if (!frozen) { diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java b/icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java index 62694396dcc..6f3b30653e5 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java @@ -531,7 +531,7 @@ public class LocaleMatcher { } - private boolean frozen = false; + private volatile boolean frozen = false; public ScoreData freeze() { return this; @@ -703,7 +703,7 @@ public class LocaleMatcher { } } - private boolean frozen = false; + private volatile boolean frozen = false; /** * {@inheritDoc} diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/RuleBasedTimeZone.java b/icu4j/main/classes/core/src/com/ibm/icu/util/RuleBasedTimeZone.java index d24880b4c6f..d79b6717008 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/RuleBasedTimeZone.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/RuleBasedTimeZone.java @@ -760,7 +760,7 @@ public class RuleBasedTimeZone extends BasicTimeZone { } // Freezable stuffs - private transient boolean isFrozen = false; + private volatile transient boolean isFrozen = false; /** * {@inheritDoc} diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/SimpleTimeZone.java b/icu4j/main/classes/core/src/com/ibm/icu/util/SimpleTimeZone.java index 335b28a8d1a..27863be5800 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/SimpleTimeZone.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/SimpleTimeZone.java @@ -1410,7 +1410,7 @@ public class SimpleTimeZone extends BasicTimeZone { } // Freezable stuffs - private transient boolean isFrozen = false; + private volatile transient boolean isFrozen = false; /** * {@inheritDoc} diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/VTimeZone.java b/icu4j/main/classes/core/src/com/ibm/icu/util/VTimeZone.java index 7da7bdd784e..bcfbec2d778 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/VTimeZone.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/VTimeZone.java @@ -2095,7 +2095,7 @@ public class VTimeZone extends BasicTimeZone { } // Freezable stuffs - private transient boolean isFrozen = false; + private volatile transient boolean isFrozen = false; /** * {@inheritDoc} diff --git a/icu4j/main/classes/localespi/src/com/ibm/icu/impl/icuadapter/TimeZoneJDK.java b/icu4j/main/classes/localespi/src/com/ibm/icu/impl/icuadapter/TimeZoneJDK.java index 7bba63772bf..d0fb9d78b71 100644 --- a/icu4j/main/classes/localespi/src/com/ibm/icu/impl/icuadapter/TimeZoneJDK.java +++ b/icu4j/main/classes/localespi/src/com/ibm/icu/impl/icuadapter/TimeZoneJDK.java @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 2008-2013, International Business Machines Corporation and * + * Copyright (C) 2008-2014, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -207,7 +207,7 @@ public class TimeZoneJDK extends com.ibm.icu.util.TimeZone { } // Freezable stuffs - private transient boolean fIsFrozen = false; + private volatile transient boolean fIsFrozen = false; @Override public boolean isFrozen() { diff --git a/icu4j/main/tests/framework/src/com/ibm/icu/dev/util/Relation.java b/icu4j/main/tests/framework/src/com/ibm/icu/dev/util/Relation.java index 2657a529616..660a93cb199 100644 --- a/icu4j/main/tests/framework/src/com/ibm/icu/dev/util/Relation.java +++ b/icu4j/main/tests/framework/src/com/ibm/icu/dev/util/Relation.java @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (c) 2002-2012, International Business Machines + * Copyright (c) 2002-2014, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Mark Davis @@ -269,7 +269,7 @@ public class Relationimplements Freezable { // TODO: add , Map implements Freezable { // TODO: add , Map implements Cloneable, Freezable, StringTransfor private transient boolean staleAvailableValues; private transient boolean errorOnReset; - private transient boolean locked; + private volatile transient boolean locked; private int lastIndex; private Map stringMap;