Skip to content

Commit 4e713f1

Browse files
committed
Unblock IPC call in TextServicesManagerService
Bug: 5471520 Change-Id: Iedf2c2cdd8d4834545d06d72ade3ce211b104b1d
1 parent c108613 commit 4e713f1

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

services/java/com/android/server/TextServicesManagerService.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.util.HashMap;
5353
import java.util.List;
5454
import java.util.Map;
55+
import java.util.concurrent.CopyOnWriteArrayList;
5556

5657
public class TextServicesManagerService extends ITextServicesManager.Stub {
5758
private static final String TAG = TextServicesManagerService.class.getSimpleName();
@@ -582,8 +583,8 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
582583
private class SpellCheckerBindGroup {
583584
private final String TAG = SpellCheckerBindGroup.class.getSimpleName();
584585
private final InternalServiceConnection mInternalConnection;
585-
private final ArrayList<InternalDeathRecipient> mListeners =
586-
new ArrayList<InternalDeathRecipient>();
586+
private final CopyOnWriteArrayList<InternalDeathRecipient> mListeners =
587+
new CopyOnWriteArrayList<InternalDeathRecipient>();
587588
public boolean mBound;
588589
public ISpellCheckerService mSpellChecker;
589590
public boolean mConnected;
@@ -601,19 +602,24 @@ public void onServiceConnected(ISpellCheckerService spellChecker) {
601602
if (DBG) {
602603
Slog.d(TAG, "onServiceConnected");
603604
}
604-
synchronized(mSpellCheckerMap) {
605-
for (InternalDeathRecipient listener : mListeners) {
606-
try {
607-
final ISpellCheckerSession session = spellChecker.getISpellCheckerSession(
608-
listener.mScLocale, listener.mScListener, listener.mBundle);
609-
listener.mTsListener.onServiceConnected(session);
610-
} catch (RemoteException e) {
611-
Slog.e(TAG, "Exception in getting the spell checker session."
612-
+ "Reconnect to the spellchecker. ", e);
613-
removeAll();
614-
return;
605+
606+
for (InternalDeathRecipient listener : mListeners) {
607+
try {
608+
final ISpellCheckerSession session = spellChecker.getISpellCheckerSession(
609+
listener.mScLocale, listener.mScListener, listener.mBundle);
610+
synchronized(mSpellCheckerMap) {
611+
if (mListeners.contains(listener)) {
612+
listener.mTsListener.onServiceConnected(session);
613+
}
615614
}
615+
} catch (RemoteException e) {
616+
Slog.e(TAG, "Exception in getting the spell checker session."
617+
+ "Reconnect to the spellchecker. ", e);
618+
removeAll();
619+
return;
616620
}
621+
}
622+
synchronized(mSpellCheckerMap) {
617623
mSpellChecker = spellChecker;
618624
mConnected = true;
619625
}

0 commit comments

Comments
 (0)