Merge "Toast: Fix the concurrency problem of mAuthenticator" am: a8438682f7 am: adfda7919a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2276161

Change-Id: I6c380882f5629bf4c8e61fdee74ff64a6de1ed1a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Dmitry Dementyev
2022-11-07 20:15:21 +00:00
committed by Automerger Merge Worker

View File

@@ -4795,6 +4795,7 @@ public class AccountManagerService
private abstract class Session extends IAccountAuthenticatorResponse.Stub private abstract class Session extends IAccountAuthenticatorResponse.Stub
implements IBinder.DeathRecipient, ServiceConnection { implements IBinder.DeathRecipient, ServiceConnection {
private final Object mSessionLock = new Object();
IAccountManagerResponse mResponse; IAccountManagerResponse mResponse;
final String mAccountType; final String mAccountType;
final boolean mExpectActivityLaunch; final boolean mExpectActivityLaunch;
@@ -4985,11 +4986,13 @@ public class AccountManagerService
} }
private void unbind() { private void unbind() {
synchronized (mSessionLock) {
if (mAuthenticator != null) { if (mAuthenticator != null) {
mAuthenticator = null; mAuthenticator = null;
mContext.unbindService(this); mContext.unbindService(this);
} }
} }
}
public void cancelTimeout() { public void cancelTimeout() {
mHandler.removeMessages(MESSAGE_TIMED_OUT, this); mHandler.removeMessages(MESSAGE_TIMED_OUT, this);
@@ -4997,6 +5000,7 @@ public class AccountManagerService
@Override @Override
public void onServiceConnected(ComponentName name, IBinder service) { public void onServiceConnected(ComponentName name, IBinder service) {
synchronized (mSessionLock) {
mAuthenticator = IAccountAuthenticator.Stub.asInterface(service); mAuthenticator = IAccountAuthenticator.Stub.asInterface(service);
try { try {
run(); run();
@@ -5005,6 +5009,7 @@ public class AccountManagerService
"remote exception"); "remote exception");
} }
} }
}
@Override @Override
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {