From c6809bb6853c6f055905cbbbf873bbe4066c5d21 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 11 Feb 2014 12:22:15 -0800 Subject: [PATCH] First always wins. In scanPackageLI(), the first provider to claim an authority wins over any other later providers. To match this behavior, this changes ProviderIntentResolver to ignore later providers with the same ComponentName. Without this behavior, AM.getContentProvider() could end up wedged waiting for a provider that generateApplicationProvidersLocked() never decided to spin up. Bug: 12956224 Change-Id: I37d3e6e9cf3eea2cac4c0e914134f6c83b2fc2bf --- .../java/com/android/server/pm/PackageManagerService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bf8c9da992ecf..d249f9a67e85e 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6106,6 +6106,11 @@ public class PackageManagerService extends IPackageManager.Stub { } public final void addProvider(PackageParser.Provider p) { + if (mProviders.containsKey(p.getComponentName())) { + Slog.w(TAG, "Provider " + p.getComponentName() + " already defined; ignoring"); + return; + } + mProviders.put(p.getComponentName(), p); if (DEBUG_SHOW_INFO) { Log.v(TAG, " "