From e17b2dd7bcc137bf4d842a779e8d62c63957a978 Mon Sep 17 00:00:00 2001 From: Ji-Hwan Lee Date: Mon, 9 Jun 2014 15:22:59 +0900 Subject: Set mBound only when bind succeeds Fixes an issue that TV input is disabled forever after package upgrade, when it's upgraded while in use. The root cause is as below: - Package is killed while upgrade. - Service disconnects, and tries to rebind for reconnecting, but bind fails because service is not available temporarily. Still ServiceState.mBound is set to true. - Should rebind next when callback is registered or new session is created, but doesn't because ServiceState is already marked bound. Bug: 14981201 Change-Id: Ia5b0acb33f1247064213024438f114bc40238648 --- services/core/java/com/android/server/tv/TvInputManagerService.java | 5 ++--- 1 file changed, 2 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 1c277a8dd961..10a67c4e421d 100644 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -301,9 +301,8 @@ public final class TvInputManagerService extends SystemService { Intent i = new Intent(TvInputService.SERVICE_INTERFACE).setComponent( userState.inputMap.get(inputId).getComponent()); - mContext.bindServiceAsUser(i, serviceState.mConnection, Context.BIND_AUTO_CREATE, - new UserHandle(userId)); - serviceState.mBound = true; + serviceState.mBound = mContext.bindServiceAsUser( + i, serviceState.mConnection, Context.BIND_AUTO_CREATE, new UserHandle(userId)); } else if (serviceState.mService != null && isStateEmpty) { // This means that the service is already connected but its state indicates that we have // nothing to do with it. Then, disconnect the service. -- cgit v1.2.3-59-g8ed1b