diff options
author | Dongwon Kang <dwkang@google.com> | 2014-04-15 17:23:24 +0900 |
---|---|---|
committer | Dongwon Kang <dwkang@google.com> | 2014-04-16 14:23:25 +0900 |
commit | fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe (patch) | |
tree | bb6ee5487aaeb9eff573d9b0f537a6f7d5ae91a2 /services | |
parent | 5b7edc5957a3c459169f56f99275cc8f997893f7 (diff) | |
download | frameworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.zip frameworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.tar.gz frameworks_base-fd5b72f1ed2ee74a4204eef65f560fc82f0b62fe.tar.bz2 |
Handle the failure of session creation request in TvInputManagerService.
Bug: 14073508
Change-Id: Idc9da323bb0000300faf662c7db031214ae6136c
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/tv/TvInputManagerService.java | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index 79c4a50..16ed7fe 100644 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -277,8 +277,14 @@ public final class TvInputManagerService extends SystemService { } synchronized (mLock) { sessionState.session = session; - sendSessionTokenToClientLocked(sessionState.client, sessionState.name, - sessionToken, sessionState.seq, userId); + if (session == null) { + removeSessionStateLocked(sessionToken, userId); + sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null, + sessionState.seq, userId); + } else { + sendSessionTokenToClientLocked(sessionState.client, sessionState.name, + sessionToken, sessionState.seq, userId); + } } } }; @@ -288,6 +294,7 @@ public final class TvInputManagerService extends SystemService { service.createSession(callback); } catch (RemoteException e) { Log.e(TAG, "error in createSession", e); + removeSessionStateLocked(sessionToken, userId); sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null, sessionState.seq, userId); } @@ -307,6 +314,19 @@ public final class TvInputManagerService extends SystemService { } } + private void removeSessionStateLocked(IBinder sessionToken, int userId) { + // Remove the session state from the global session state map of the current user. + UserState userState = getUserStateLocked(userId); + SessionState sessionState = userState.sessionStateMap.remove(sessionToken); + + // Also remove the session state from the session state map of the current service. + ServiceState serviceState = userState.serviceStateMap.get(sessionState.name); + if (serviceState != null) { + serviceState.sessionStateMap.remove(sessionToken); + } + updateServiceConnectionLocked(sessionState.name, userId); + } + private final class BinderService extends ITvInputManager.Stub { @Override public List<TvInputInfo> getTvInputList(int userId) { @@ -474,17 +494,7 @@ public final class TvInputManagerService extends SystemService { Log.e(TAG, "error in release", e); } - // Remove its state from the global session state map of the current user. - UserState userState = getUserStateLocked(resolvedUserId); - SessionState sessionState = userState.sessionStateMap.remove(sessionToken); - - // Also remove it from the session state map of the current service. - ServiceState serviceState = userState.serviceStateMap.get(sessionState.name); - if (serviceState != null) { - serviceState.sessionStateMap.remove(sessionToken); - } - - updateServiceConnectionLocked(sessionState.name, resolvedUserId); + removeSessionStateLocked(sessionToken, resolvedUserId); } } finally { Binder.restoreCallingIdentity(identity); |