summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-10-31 19:38:05 +0900
committersatok <satok@google.com>2011-10-31 19:38:05 +0900
commit2520ed8cc3436df023a4f0ce3f436977b8ab3a99 (patch)
tree795160788afb58c66fc22d6538e2dbbfce6720b1 /services
parentb4529b0adca243644f601c9fe5d419c283bf57c1 (diff)
downloadframeworks_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.java9
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();
}