diff options
| author | 2013-10-01 00:13:26 +0900 | |
|---|---|---|
| committer | 2013-10-08 12:22:30 -0700 | |
| commit | bc74de6722f84e373cc77089e2843527afdd4c47 (patch) | |
| tree | 0667c9319ee7689008ff80752b3d3d7681ab7002 | |
| parent | c8670bbd0a3ded1d4c6d98f85b3a8c75f9e3428e (diff) | |
Wrong argument: handleUnstableProviderDiedLocked
mProvider is HashMap<ProviderKey, ProviderClientRecord>. String
is not correct object for KEY. Complete removal using iterator.
Bug: 11086495
Change-Id: I51e4576544ef02ede6f96938689dd4e43ec6eb4f
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index b364af7bded8..e07b50fe5ff7 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4636,15 +4636,14 @@ public final class ActivityThread { if (DEBUG_PROVIDER) Slog.v(TAG, "Cleaning up dead provider " + provider + " " + prc.holder.info.name); mProviderRefCountMap.remove(provider); - if (prc.client != null && prc.client.mNames != null) { - for (String name : prc.client.mNames) { - ProviderClientRecord pr = mProviderMap.get(name); - if (pr != null && pr.mProvider.asBinder() == provider) { - Slog.i(TAG, "Removing dead content provider: " + name); - mProviderMap.remove(name); - } + for (int i=mProviderMap.size()-1; i>=0; i--) { + ProviderClientRecord pr = mProviderMap.valueAt(i); + if (pr != null && pr.mProvider.asBinder() == provider) { + Slog.i(TAG, "Removing dead content provider:" + pr.mProvider.toString()); + mProviderMap.removeAt(i); } } + if (fromClient) { // We found out about this due to execution in our client // code. Tell the activity manager about it now, to ensure |