OSDN Git Service

Fix a synchronization problem
authorJulia Reynolds <juliacr@google.com>
Wed, 10 Apr 2019 20:18:13 +0000 (16:18 -0400)
committerJulia Reynolds <juliacr@google.com>
Wed, 10 Apr 2019 20:19:45 +0000 (20:19 +0000)
setConfigLocked needs to be called with the lock held,
imagine that

Test: atest CondistionProviderServiceTest
Fixes: 124397432
Change-Id: I0461b1d5b08e6b83753835fcf6b2e7937c31a9fc

services/core/java/com/android/server/notification/ZenModeHelper.java

index ea7bf2d..7e74cc2 100644 (file)
@@ -389,8 +389,8 @@ public class ZenModeHelper {
             if (mConfig == null) return;
 
             newConfig = mConfig.copy();
+            setAutomaticZenRuleStateLocked(newConfig, newConfig.automaticRules.get(id), condition);
         }
-        setAutomaticZenRuleState(newConfig, newConfig.automaticRules.get(id), condition);
     }
 
     public void setAutomaticZenRuleState(Uri ruleDefinition, Condition condition) {
@@ -398,14 +398,15 @@ public class ZenModeHelper {
         synchronized (mConfig) {
             if (mConfig == null) return;
             newConfig = mConfig.copy();
-        }
 
-        setAutomaticZenRuleState(newConfig,
-                findMatchingRule(newConfig, ruleDefinition, condition),
-                condition);
+            setAutomaticZenRuleStateLocked(newConfig,
+                    findMatchingRule(newConfig, ruleDefinition, condition),
+                    condition);
+        }
     }
 
-    private void setAutomaticZenRuleState(ZenModeConfig config, ZenRule rule, Condition condition) {
+    private void setAutomaticZenRuleStateLocked(ZenModeConfig config, ZenRule rule,
+            Condition condition) {
         if (rule == null) return;
 
         rule.condition = condition;