Merge "SystemServer: fix an infinite loop in TvInputManagerService [1/1]"
This commit is contained in:
@@ -714,6 +714,7 @@ public final class TvInputManagerService extends SystemService {
|
|||||||
SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
|
SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
|
||||||
|
|
||||||
if (sessionState == null) {
|
if (sessionState == null) {
|
||||||
|
Slog.e(TAG, "sessionState null, no more remove session action!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2278,8 +2279,16 @@ public final class TvInputManagerService extends SystemService {
|
|||||||
ClientState clientState = userState.clientStateMap.get(clientToken);
|
ClientState clientState = userState.clientStateMap.get(clientToken);
|
||||||
if (clientState != null) {
|
if (clientState != null) {
|
||||||
while (clientState.sessionTokens.size() > 0) {
|
while (clientState.sessionTokens.size() > 0) {
|
||||||
|
IBinder sessionToken = clientState.sessionTokens.get(0);
|
||||||
releaseSessionLocked(
|
releaseSessionLocked(
|
||||||
clientState.sessionTokens.get(0), Process.SYSTEM_UID, userId);
|
sessionToken, Process.SYSTEM_UID, userId);
|
||||||
|
// the releaseSessionLocked function may return before the sessionToken
|
||||||
|
// is removed if the related sessionState is null. So need to check again
|
||||||
|
// to avoid death curculation.
|
||||||
|
if (clientState.sessionTokens.contains(sessionToken)) {
|
||||||
|
Slog.d(TAG, "remove sessionToken " + sessionToken + " for " + clientToken);
|
||||||
|
clientState.sessionTokens.remove(sessionToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clientToken = null;
|
clientToken = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user