From 166466d483cc3d57e7d3d465fd92ce62409c8455 Mon Sep 17 00:00:00 2001 From: Fred Quintana Date: Mon, 24 Oct 2011 14:51:40 -0700 Subject: [PATCH] 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 --- .../accounts/AccountManagerService.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 1ba8eee3d3b24..4f3405b852c93 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -499,7 +499,7 @@ public class AccountManagerService 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 @@ public class AccountManagerService 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 class AccountManagerService 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); + } + } } }