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
This commit is contained in:
Ji-Hwan Lee
2014-06-09 15:22:59 +09:00
parent f43cea0094
commit e17b2dd7bc

View File

@ -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.