diff options
| author | 2022-11-07 18:41:02 +0000 | |
|---|---|---|
| committer | 2022-11-07 18:41:02 +0000 | |
| commit | a8438682f7acf24985513d42c684843f0d44b15e (patch) | |
| tree | bcb4f1c9b803e2648a02c03d7d2cf5d7957a61a4 | |
| parent | 927a9ea7b9734deef0302b1b83678777b4c4d20d (diff) | |
| parent | 13389cd45f42f27054b5958225398e8af4654986 (diff) | |
Merge "Toast: Fix the concurrency problem of mAuthenticator"
| -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"); + } } } |