Merge "Fix race in removeDeadProvider. Bug: 5202824"

This commit is contained in:
Jeff Brown
2011-08-23 13:33:49 -07:00
committed by Android (Google) Code Review

View File

@@ -4091,7 +4091,7 @@ public final class ActivityThread {
final void removeDeadProvider(String name, IContentProvider provider) { final void removeDeadProvider(String name, IContentProvider provider) {
synchronized(mProviderMap) { synchronized(mProviderMap) {
ProviderClientRecord pr = mProviderMap.get(name); ProviderClientRecord pr = mProviderMap.get(name);
if (pr.mProvider.asBinder() == provider.asBinder()) { if (pr != null && pr.mProvider.asBinder() == provider.asBinder()) {
Slog.i(TAG, "Removing dead content provider: " + name); Slog.i(TAG, "Removing dead content provider: " + name);
ProviderClientRecord removed = mProviderMap.remove(name); ProviderClientRecord removed = mProviderMap.remove(name);
if (removed != null) { if (removed != null) {
@@ -4101,17 +4101,6 @@ public final class ActivityThread {
} }
} }
final void removeDeadProviderLocked(String name, IContentProvider provider) {
ProviderClientRecord pr = mProviderMap.get(name);
if (pr.mProvider.asBinder() == provider.asBinder()) {
Slog.i(TAG, "Removing dead content provider: " + name);
ProviderClientRecord removed = mProviderMap.remove(name);
if (removed != null) {
removed.mProvider.asBinder().unlinkToDeath(removed, 0);
}
}
}
private IContentProvider installProvider(Context context, private IContentProvider installProvider(Context context,
IContentProvider provider, ProviderInfo info, boolean noisy) { IContentProvider provider, ProviderInfo info, boolean noisy) {
ContentProvider localProvider = null; ContentProvider localProvider = null;