summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-09-04 20:28:52 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2024-09-04 20:28:52 +0000
commit91f912fe96b8459ffacfc57a8834115658e325e8 (patch)
treebc441e87986512e1d6a1708706597798fc92a26a
parent381fc97a414ce91a92beccc082ebec07a7ef1b86 (diff)
parent33f4440bb042aa1aab9cbbdcfc5eb84b427af24d (diff)
Merge "ITvInputManagerCallback leak when client died" into main
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java19
1 files changed, 16 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index e0a822604058..3d5fc7cf170e 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -3254,7 +3254,20 @@ public final class TvInputManagerService extends SystemService {
return filteredDisplayName;
}
- private static final class UserState {
+ private class TvInputManagerCallbackList extends RemoteCallbackList<ITvInputManagerCallback> {
+ @Override
+ public void onCallbackDied(ITvInputManagerCallback callback) {
+ synchronized (mLock) {
+ for (int i = 0; i < mUserStates.size(); i++) {
+ int userId = mUserStates.keyAt(i);
+ UserState userState = getOrCreateUserStateLocked(userId);
+ userState.callbackPidUidMap.remove(callback);
+ }
+ }
+ }
+ }
+
+ private final class UserState {
// A mapping from the TV input id to its TvInputState.
private Map<String, TvInputState> inputMap = new HashMap<>();
@@ -3275,8 +3288,8 @@ public final class TvInputManagerService extends SystemService {
private final Map<IBinder, SessionState> sessionStateMap = new HashMap<>();
// A list of callbacks.
- private final RemoteCallbackList<ITvInputManagerCallback> mCallbacks =
- new RemoteCallbackList<>();
+ private final TvInputManagerCallbackList mCallbacks =
+ new TvInputManagerCallbackList();
private final Map<ITvInputManagerCallback, Pair<Integer, Integer>> callbackPidUidMap =
new HashMap<>();