diff options
author | Jozef BABJAK <jozef.babjak@gmail.com> | 2011-02-22 09:17:51 +0100 |
---|---|---|
committer | Jozef BABJAK <jozef.babjak@gmail.com> | 2011-02-22 09:17:51 +0100 |
commit | 25d8b05fb77e8ee755aacd27c1c2d3b237537b7a (patch) | |
tree | eb5ada5dd64237571203150f36888b3a773a3c5b /core/java/android/text/format/DateUtils.java | |
parent | 7118bdec523568842e70555e353951df9f2596fd (diff) | |
download | frameworks_base-25d8b05fb77e8ee755aacd27c1c2d3b237537b7a.zip frameworks_base-25d8b05fb77e8ee755aacd27c1c2d3b237537b7a.tar.gz frameworks_base-25d8b05fb77e8ee755aacd27c1c2d3b237537b7a.tar.bz2 |
Ensuring thread-safe usage of DateFormat.
DateFormat is inherently unsafe for multithreaded use. This patch adds
proper synchronization. The 'sLock' is re-used. To avoid two consecutive
lockings, locked version of initFormatStrings() method is created and
used where appropriate, i.e. in original method AND in added synchronized
block.
Change-Id: Id3c34613623e743e703aadb2342aa788679dda8a
Diffstat (limited to 'core/java/android/text/format/DateUtils.java')
-rw-r--r-- | core/java/android/text/format/DateUtils.java | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index a95dad7..353b628 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -642,14 +642,18 @@ public class DateUtils private static void initFormatStrings() { synchronized (sLock) { - Resources r = Resources.getSystem(); - Configuration cfg = r.getConfiguration(); - if (sLastConfig == null || !sLastConfig.equals(cfg)) { - sLastConfig = cfg; - sStatusTimeFormat = java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT); - sElapsedFormatMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_mm_ss); - sElapsedFormatHMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_h_mm_ss); - } + initFormatStringsLocked(); + } + } + + private static void initFormatStringsLocked() { + Resources r = Resources.getSystem(); + Configuration cfg = r.getConfiguration(); + if (sLastConfig == null || !sLastConfig.equals(cfg)) { + sLastConfig = cfg; + sStatusTimeFormat = java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT); + sElapsedFormatMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_mm_ss); + sElapsedFormatHMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_h_mm_ss); } } @@ -659,8 +663,10 @@ public class DateUtils * @hide */ public static final CharSequence timeString(long millis) { - initFormatStrings(); - return sStatusTimeFormat.format(millis); + synchronized (sLock) { + initFormatStringsLocked(); + return sStatusTimeFormat.format(millis); + } } /** |