summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Suprabh Shukla <suprabh@google.com> 2021-05-26 20:52:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-05-26 20:52:55 +0000
commit18cdcb663e505a2d469a9b135e3f095842bc5d3f (patch)
treea53e0da8042dd621d0ae181f3598838b6fa86c57
parent1d4a672528d50e9e389b8dcbe3a00e6ef5af2a05 (diff)
parentb4da4f362dce1aeb6c7463540859f7c9d720cc97 (diff)
Merge "Unlink listener death recipient on alarms" into sc-dev
-rw-r--r--apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java19
1 files changed, 8 insertions, 11 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
index 5365218203d9..752dd2536487 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -121,7 +121,6 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsService;
-import com.android.internal.os.BinderDeathDispatcher;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.LocalLog;
@@ -206,8 +205,6 @@ public class AlarmManagerService extends SystemService {
.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
| Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
- private static final BinderDeathDispatcher<IAlarmListener> sListenerDeathDispatcher =
- new BinderDeathDispatcher<>();
final LocalLog mLog = new LocalLog(TAG);
AppOpsManager mAppOps;
@@ -1837,8 +1834,9 @@ public class AlarmManagerService extends SystemService {
}
if (directReceiver != null) {
- if (sListenerDeathDispatcher.linkToDeath(directReceiver, mListenerDeathRecipient)
- <= 0) {
+ try {
+ directReceiver.asBinder().linkToDeath(mListenerDeathRecipient, 0);
+ } catch (RemoteException e) {
Slog.w(TAG, "Dropping unreachable alarm listener " + listenerTag);
return;
}
@@ -2851,12 +2849,6 @@ public class AlarmManagerService extends SystemService {
pw.println();
}
- pw.println("Listener death dispatcher state:");
- pw.increaseIndent();
- sListenerDeathDispatcher.dump(pw);
- pw.println();
- pw.decreaseIndent();
-
if (mLog.dump(pw, "Recent problems:")) {
pw.println();
}
@@ -3448,6 +3440,9 @@ public class AlarmManagerService extends SystemService {
for (final Alarm removed : removedAlarms) {
decrementAlarmCount(removed.uid, 1);
+ if (removed.listener != null) {
+ removed.listener.asBinder().unlinkToDeath(mListenerDeathRecipient, 0);
+ }
if (!RemovedAlarm.isLoggable(reason)) {
continue;
}
@@ -4701,6 +4696,8 @@ public class AlarmManagerService extends SystemService {
// Direct listener callback alarm
mListenerCount++;
+ alarm.listener.asBinder().unlinkToDeath(mListenerDeathRecipient, 0);
+
if (RECORD_ALARMS_IN_HISTORY) {
if (alarm.listener == mTimeTickTrigger) {
mTickHistory[mNextTickHistory++] = nowELAPSED;