summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChulwoo Lee <chulwoo@google.com>2014-08-18 05:49:26 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-08-18 05:49:26 +0000
commite33564ab9cd5a71b07a705a7703e69ae6b8be37d (patch)
tree0b0eedbd46a2c7fc060fe683a9a6af6ed100c970
parent730095c1d8edfe9d9a7871bc9c24412e2128bad7 (diff)
parent3d34b54ca8d5af82e021f9a43dd230af9d2ce918 (diff)
downloadframeworks_base-e33564ab9cd5a71b07a705a7703e69ae6b8be37d.zip
frameworks_base-e33564ab9cd5a71b07a705a7703e69ae6b8be37d.tar.gz
frameworks_base-e33564ab9cd5a71b07a705a7703e69ae6b8be37d.tar.bz2
am 6cc20192: Merge "Fix ConcurrentModificationException in PersistentDataStore" into lmp-dev
* commit '6cc201929764089c49d777ed983ee776b38054e6': Fix ConcurrentModificationException in PersistentDataStore
-rw-r--r--services/core/java/com/android/server/tv/PersistentDataStore.java22
1 files changed, 14 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/tv/PersistentDataStore.java b/services/core/java/com/android/server/tv/PersistentDataStore.java
index 05a2bde..fcfaaea 100644
--- a/services/core/java/com/android/server/tv/PersistentDataStore.java
+++ b/services/core/java/com/android/server/tv/PersistentDataStore.java
@@ -45,6 +45,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -69,7 +70,8 @@ final class PersistentDataStore {
// The atomic file used to safely read or write the file.
private final AtomicFile mAtomicFile;
- private final List<TvContentRating> mBlockedRatings = new ArrayList<TvContentRating>();
+ private final List<TvContentRating> mBlockedRatings =
+ Collections.synchronizedList(new ArrayList<TvContentRating>());
private boolean mBlockedRatingsChanged;
@@ -107,9 +109,11 @@ final class PersistentDataStore {
public boolean isRatingBlocked(TvContentRating rating) {
loadIfNeeded();
- for (TvContentRating blcokedRating : mBlockedRatings) {
- if (rating.contains(blcokedRating)) {
- return true;
+ synchronized (mBlockedRatings) {
+ for (TvContentRating blcokedRating : mBlockedRatings) {
+ if (rating.contains(blcokedRating)) {
+ return true;
+ }
}
}
return false;
@@ -271,10 +275,12 @@ final class PersistentDataStore {
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, TAG_TV_INPUT_MANAGER_STATE);
serializer.startTag(null, TAG_BLOCKED_RATINGS);
- for (TvContentRating rating : mBlockedRatings) {
- serializer.startTag(null, TAG_RATING);
- serializer.attribute(null, ATTR_STRING, rating.flattenToString());
- serializer.endTag(null, TAG_RATING);
+ synchronized (mBlockedRatings) {
+ for (TvContentRating rating : mBlockedRatings) {
+ serializer.startTag(null, TAG_RATING);
+ serializer.attribute(null, ATTR_STRING, rating.flattenToString());
+ serializer.endTag(null, TAG_RATING);
+ }
}
serializer.endTag(null, TAG_BLOCKED_RATINGS);
serializer.startTag(null, TAG_PARENTAL_CONTROLS);