diff options
| author | 2014-02-11 12:22:15 -0800 | |
|---|---|---|
| committer | 2014-02-11 12:22:15 -0800 | |
| commit | c6809bb6853c6f055905cbbbf873bbe4066c5d21 (patch) | |
| tree | ce73cbdbde14206facf3a3c32efb421879cfeb42 | |
| parent | b341a24b2adbb67cdc34ade0a19570ee37f0cb82 (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-x | services/core/java/com/android/server/pm/PackageManagerService.java | 5 |
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, " " |