diff options
author | satok <satok@google.com> | 2011-10-31 19:38:05 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-10-31 19:38:05 +0900 |
commit | 2520ed8cc3436df023a4f0ce3f436977b8ab3a99 (patch) | |
tree | 795160788afb58c66fc22d6538e2dbbfce6720b1 /services | |
parent | b4529b0adca243644f601c9fe5d419c283bf57c1 (diff) | |
download | frameworks_base-2520ed8cc3436df023a4f0ce3f436977b8ab3a99.zip frameworks_base-2520ed8cc3436df023a4f0ce3f436977b8ab3a99.tar.gz frameworks_base-2520ed8cc3436df023a4f0ce3f436977b8ab3a99.tar.bz2 |
Resolve memory leak in TextServicesManagerService
Bug: 5499490
Change-Id: I3537b0d733a53d4783902a545cd9ecc7e4c2eac1
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/TextServicesManagerService.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java index 1976eba..b042da6 100644 --- a/services/java/com/android/server/TextServicesManagerService.java +++ b/services/java/com/android/server/TextServicesManagerService.java @@ -635,7 +635,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { if (DBG) { Slog.w(TAG, "Remove " + removeList.get(i)); } - mListeners.remove(removeList.get(i)); + final InternalDeathRecipient idr = removeList.get(i); + idr.mScListener.asBinder().unlinkToDeath(idr, 0); + mListeners.remove(idr); } cleanLocked(); } @@ -664,6 +666,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { public void removeAll() { Slog.e(TAG, "Remove the spell checker bind unexpectedly."); synchronized(mSpellCheckerMap) { + final int size = mListeners.size(); + for (int i = 0; i < size; ++i) { + final InternalDeathRecipient idr = mListeners.get(i); + idr.mScListener.asBinder().unlinkToDeath(idr, 0); + } mListeners.clear(); cleanLocked(); } |