diff --git a/services/core/java/com/android/server/notification/ZenModeConditions.java b/services/core/java/com/android/server/notification/ZenModeConditions.java index c2e434979c01e..22b685597c0c6 100644 --- a/services/core/java/com/android/server/notification/ZenModeConditions.java +++ b/services/core/java/com/android/server/notification/ZenModeConditions.java @@ -76,14 +76,17 @@ public class ZenModeConditions implements ConditionProviders.Callback { evaluateRule(automaticRule, current, processSubscriptions); updateSnoozing(automaticRule); } - final int N = mSubscriptions.size(); - for (int i = N - 1; i >= 0; i--) { - final Uri id = mSubscriptions.keyAt(i); - final ComponentName component = mSubscriptions.valueAt(i); - if (processSubscriptions) { - if (!current.contains(id)) { - mConditionProviders.unsubscribeIfNecessary(component, id); - mSubscriptions.removeAt(i); + + synchronized (mSubscriptions) { + final int N = mSubscriptions.size(); + for (int i = N - 1; i >= 0; i--) { + final Uri id = mSubscriptions.keyAt(i); + final ComponentName component = mSubscriptions.valueAt(i); + if (processSubscriptions) { + if (!current.contains(id)) { + mConditionProviders.unsubscribeIfNecessary(component, id); + mSubscriptions.removeAt(i); + } } } } @@ -152,7 +155,9 @@ public class ZenModeConditions implements ConditionProviders.Callback { } if (processSubscriptions) { if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) { - mSubscriptions.put(rule.conditionId, rule.component); + synchronized (mSubscriptions) { + mSubscriptions.put(rule.conditionId, rule.component); + } } else { if (DEBUG) Log.d(TAG, "zmc failed to subscribe"); }