summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author shaofeng qiang <shaofeng.qiang@amlogic.com> 2024-07-03 07:34:40 +0000
committer shaofeng qiang <shaofeng.qiang@amlogic.com> 2024-08-13 02:04:53 +0000
commit33f4440bb042aa1aab9cbbdcfc5eb84b427af24d (patch)
tree2035ae52c008abb10cbd0e9d15a254f0865c69c4
parent4e40170304c97d54c4c890bf9cac83db20e3103f (diff)
ITvInputManagerCallback leak when client died
Change-Id: Ifcc7075404be766d46acdaba7d7e3043bc8b9495
-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<>();