summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2014-02-11 12:22:15 -0800
committer Jeff Sharkey <jsharkey@android.com> 2014-02-11 12:22:15 -0800
commitc6809bb6853c6f055905cbbbf873bbe4066c5d21 (patch)
treece73cbdbde14206facf3a3c32efb421879cfeb42
parentb341a24b2adbb67cdc34ade0a19570ee37f0cb82 (diff)
First <provider> 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
-rwxr-xr-xservices/core/java/com/android/server/pm/PackageManagerService.java5
1 files changed, 5 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index bf8c9da992ec..d249f9a67e85 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, " "