Merge "Fix a race in spell checker session handling" into pi-dev

This commit is contained in:
android-build-team Robot
2018-05-02 23:31:38 +00:00
committed by Android (Google) Code Review

View File

@@ -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