diff options
author | 2024-09-04 20:28:52 +0000 | |
---|---|---|
committer | 2024-09-04 20:28:52 +0000 | |
commit | 91f912fe96b8459ffacfc57a8834115658e325e8 (patch) | |
tree | bc441e87986512e1d6a1708706597798fc92a26a | |
parent | 381fc97a414ce91a92beccc082ebec07a7ef1b86 (diff) | |
parent | 33f4440bb042aa1aab9cbbdcfc5eb84b427af24d (diff) |
Merge "ITvInputManagerCallback leak when client died" into main
-rw-r--r-- | services/core/java/com/android/server/tv/TvInputManagerService.java | 19 |
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<>(); |