Fixed a bug that causes AccountManager calls to hang forever, eventually
exhausting the binder threads in the gapps process, making it unusable.

Bug: 5486091

Change-Id: I82bd197e27c2be1bf82e4e5cc1468e1c6a3e4919
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java
index 1ba8eee..4f3405b 100644
--- a/core/java/android/accounts/AccountManagerService.java
+++ b/core/java/android/accounts/AccountManagerService.java
@@ -499,7 +499,7 @@
             if (response != null) {
                 try {
                     if (result == null) {
-                        onError(AccountManager.ERROR_CODE_INVALID_RESPONSE, "null bundle");
+                        response.onError(AccountManager.ERROR_CODE_INVALID_RESPONSE, "null bundle");
                         return;
                     }
                     if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -1541,8 +1541,15 @@
             mAuthenticator = null;
             IAccountManagerResponse response = getResponseAndClose();
             if (response != null) {
-                onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION,
-                        "disconnected");
+                try {
+                    response.onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION,
+                            "disconnected");
+                } catch (RemoteException e) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "Session.onServiceDisconnected: "
+                                + "caught RemoteException while responding", e);
+                    }
+                }
             }
         }
 
@@ -1551,8 +1558,15 @@
         public void onTimedOut() {
             IAccountManagerResponse response = getResponseAndClose();
             if (response != null) {
-                onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION,
-                        "timeout");
+                try {
+                    response.onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION,
+                            "timeout");
+                } catch (RemoteException e) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "Session.onTimedOut: caught RemoteException while responding",
+                                e);
+                    }
+                }
             }
         }