From eec8ee430c431e3991e68bb604b62682b8defce8 Mon Sep 17 00:00:00 2001 From: Stanislav Zholnin Date: Mon, 18 May 2020 02:37:23 +0100 Subject: [PATCH] Fix race condition on cancelling alarms There was a race condition in which pulling alarms can be cancellled after they are initialized, causing bucket boundary pulls to fail. Test: manually verifified alarm consistently cancelled before being set Test: manually verified alarms were properly cancelled on statsd crash Fix: 156855909 Change-Id: I913b6f3e3d03269fb9283199f8b9d666a298e145 --- .../android/server/stats/StatsCompanionService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java index 5cf5e0b1d182f..cbc8ed636ff2a 100644 --- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java @@ -662,14 +662,19 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { return; } + // Cleann up from previous statsd - cancel any alarms that had been set. Do this here + // instead of in binder death because statsd can come back and set different alarms, or not + // want to set an alarm when it had been set. This guarantees that when we get a new statsd, + // we cancel any alarms before it is able to set them. + cancelAnomalyAlarm(); + cancelPullingAlarm(); + cancelAlarmForSubscriberTriggering(); + if (DEBUG) Log.d(TAG, "Saying hi to statsd"); mStatsManagerService.statsdReady(statsd); try { statsd.statsCompanionReady(); - cancelAnomalyAlarm(); - cancelPullingAlarm(); - BroadcastReceiver appUpdateReceiver = new AppUpdateReceiver(); BroadcastReceiver userUpdateReceiver = new UserUpdateReceiver(); BroadcastReceiver shutdownEventReceiver = new ShutdownEventReceiver();