summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorJozef BABJAK <jozef.babjak@gmail.com>2011-02-22 09:17:51 +0100
committerJozef BABJAK <jozef.babjak@gmail.com>2011-02-22 09:17:51 +0100
commit25d8b05fb77e8ee755aacd27c1c2d3b237537b7a (patch)
treeeb5ada5dd64237571203150f36888b3a773a3c5b /core/java
parent7118bdec523568842e70555e353951df9f2596fd (diff)
downloadframeworks_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')
-rw-r--r--core/java/android/text/format/DateUtils.java26
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);
+ }
}
/**