OSDN Git Service

Set mBound only when bind succeeds
authorJi-Hwan Lee <jihwan@google.com>
Mon, 9 Jun 2014 06:22:59 +0000 (15:22 +0900)
committerJi-Hwan Lee <jihwan@google.com>
Mon, 9 Jun 2014 06:22:59 +0000 (15:22 +0900)
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

index 1c277a8..10a67c4 100644 (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.