diff options
| -rw-r--r-- | services/core/java/com/android/server/accounts/AccountManagerService.java | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 6b731c319c4b..8dc02c107a5a 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -4794,6 +4794,7 @@ public class AccountManagerService private abstract class Session extends IAccountAuthenticatorResponse.Stub implements IBinder.DeathRecipient, ServiceConnection { + private final Object mSessionLock = new Object(); IAccountManagerResponse mResponse; final String mAccountType; final boolean mExpectActivityLaunch; @@ -4959,9 +4960,11 @@ public class AccountManagerService } private void unbind() { - if (mAuthenticator != null) { - mAuthenticator = null; - mContext.unbindService(this); + synchronized (mSessionLock) { + if (mAuthenticator != null) { + mAuthenticator = null; + mContext.unbindService(this); + } } } @@ -4971,12 +4974,14 @@ public class AccountManagerService @Override public void onServiceConnected(ComponentName name, IBinder service) { - mAuthenticator = IAccountAuthenticator.Stub.asInterface(service); - try { - run(); - } catch (RemoteException e) { - onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION, - "remote exception"); + synchronized (mSessionLock) { + mAuthenticator = IAccountAuthenticator.Stub.asInterface(service); + try { + run(); + } catch (RemoteException e) { + onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION, + "remote exception"); + } } } |