diff options
author | satok <satok@google.com> | 2012-02-28 16:51:15 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2012-02-28 17:00:46 +0900 |
commit | 4e713f14419a37f385cf1509b011982bdcf67edc (patch) | |
tree | 80ffe6aca8540d81dd5792e4e6911a4feaf85f98 /services/java/com/android/server/TextServicesManagerService.java | |
parent | c108613fb8ef0fabb3f08198a52bd0877e382937 (diff) |
Unblock IPC call in TextServicesManagerService
Bug: 5471520
Change-Id: Iedf2c2cdd8d4834545d06d72ade3ce211b104b1d
Diffstat (limited to 'services/java/com/android/server/TextServicesManagerService.java')
-rw-r--r-- | services/java/com/android/server/TextServicesManagerService.java | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java index 8384ebc23d7d..106bb3e65119 100644 --- a/services/java/com/android/server/TextServicesManagerService.java +++ b/services/java/com/android/server/TextServicesManagerService.java @@ -52,6 +52,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; public class TextServicesManagerService extends ITextServicesManager.Stub { private static final String TAG = TextServicesManagerService.class.getSimpleName(); @@ -582,8 +583,8 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private class SpellCheckerBindGroup { private final String TAG = SpellCheckerBindGroup.class.getSimpleName(); private final InternalServiceConnection mInternalConnection; - private final ArrayList<InternalDeathRecipient> mListeners = - new ArrayList<InternalDeathRecipient>(); + private final CopyOnWriteArrayList<InternalDeathRecipient> mListeners = + new CopyOnWriteArrayList<InternalDeathRecipient>(); public boolean mBound; public ISpellCheckerService mSpellChecker; public boolean mConnected; @@ -601,19 +602,24 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { if (DBG) { Slog.d(TAG, "onServiceConnected"); } - synchronized(mSpellCheckerMap) { - for (InternalDeathRecipient listener : mListeners) { - try { - final ISpellCheckerSession session = spellChecker.getISpellCheckerSession( - listener.mScLocale, listener.mScListener, listener.mBundle); - listener.mTsListener.onServiceConnected(session); - } catch (RemoteException e) { - Slog.e(TAG, "Exception in getting the spell checker session." - + "Reconnect to the spellchecker. ", e); - removeAll(); - return; + + for (InternalDeathRecipient listener : mListeners) { + try { + final ISpellCheckerSession session = spellChecker.getISpellCheckerSession( + listener.mScLocale, listener.mScListener, listener.mBundle); + synchronized(mSpellCheckerMap) { + if (mListeners.contains(listener)) { + listener.mTsListener.onServiceConnected(session); + } } + } catch (RemoteException e) { + Slog.e(TAG, "Exception in getting the spell checker session." + + "Reconnect to the spellchecker. ", e); + removeAll(); + return; } + } + synchronized(mSpellCheckerMap) { mSpellChecker = spellChecker; mConnected = true; } |