diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 672ee0ec6aa5d..6c2806e402b44 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -4795,6 +4795,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; @@ -4985,9 +4986,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); + } } } @@ -4997,12 +5000,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"); + } } }