Merge "Fix a race in spell checker session handling" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bca85a0d44
@@ -71,6 +71,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class TextServicesManagerService extends ITextServicesManager.Stub {
|
||||
private static final String TAG = TextServicesManagerService.class.getSimpleName();
|
||||
@@ -885,6 +886,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
||||
}
|
||||
synchronized (mLock) {
|
||||
mListeners.unregister(listener);
|
||||
final IBinder scListenerBinder = listener.asBinder();
|
||||
final Predicate<SessionRequest> removeCondition =
|
||||
request -> request.mScListener.asBinder() == scListenerBinder;
|
||||
mPendingSessionRequests.removeIf(removeCondition);
|
||||
mOnGoingSessionRequests.removeIf(removeCondition);
|
||||
cleanLocked();
|
||||
}
|
||||
}
|
||||
@@ -934,6 +940,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
||||
if (mUnbindCalled) {
|
||||
return;
|
||||
}
|
||||
mListeners.register(request.mScListener);
|
||||
if (!mConnected) {
|
||||
mPendingSessionRequests.add(request);
|
||||
return;
|
||||
@@ -959,7 +966,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
||||
if (mOnGoingSessionRequests.remove(request)) {
|
||||
try {
|
||||
request.mTsListener.onServiceConnected(newSession);
|
||||
mListeners.register(request.mScListener);
|
||||
} catch (RemoteException e) {
|
||||
// Technically this can happen if the spell checker client app is already
|
||||
// dead. We can just forget about this request; the request is already
|
||||
|
||||
Reference in New Issue
Block a user