diff options
| author | 2024-09-04 20:34:12 +0000 | |
|---|---|---|
| committer | 2024-09-04 20:34:12 +0000 | |
| commit | 0220cf4d34201cb33307ad68f7dfae52deade717 (patch) | |
| tree | 714a9cdee97e1c651462e368a9776da6a18d5740 | |
| parent | d13c118417777bce77b278789fa0c3dd184c35ef (diff) | |
| parent | 91f912fe96b8459ffacfc57a8834115658e325e8 (diff) | |
Merge "ITvInputManagerCallback leak when client died" into main am: 91f912fe96
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3158336
Change-Id: I0fdf555961d3aad1d269ebfbdc2762e3e801799a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -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<>(); |