Skip to content

Commit 8809004

Browse files
committed
ProviderMap: remove hashmap when entire user specific entries are removed
User specific entries in mProvidersByNamePerUser and mProvidersByClassPerUser isn't cleared when entire user specific providers are removed. Fix is to remove the user specific hashmap in such cases. Change-Id: I6edf211ced873e59f3b89ffceb9eceec13ea8f3f
1 parent 9885362 commit 8809004

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

services/java/com/android/server/am/ProviderMap.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,12 @@ void removeProviderByName(String name, int optionalUserId) {
127127
Slog.i(TAG,
128128
"Removing from providersByName name=" + name + " user="
129129
+ (optionalUserId == -1 ? Binder.getOrigCallingUser() : optionalUserId));
130-
getProvidersByName(optionalUserId).remove(name);
130+
HashMap<String, ContentProviderRecord> map = getProvidersByName(optionalUserId);
131+
// map returned by getProvidersByName wouldn't be null
132+
map.remove(name);
133+
if (map.size() == 0) {
134+
mProvidersByNamePerUser.remove(optionalUserId);
135+
}
131136
}
132137
}
133138

@@ -141,7 +146,12 @@ void removeProviderByClass(ComponentName name, int optionalUserId) {
141146
Slog.i(TAG,
142147
"Removing from providersByClass name=" + name + " user="
143148
+ (optionalUserId == -1 ? Binder.getOrigCallingUser() : optionalUserId));
144-
getProvidersByClass(optionalUserId).remove(name);
149+
HashMap<ComponentName, ContentProviderRecord> map = getProvidersByClass(optionalUserId);
150+
// map returned by getProvidersByClass wouldn't be null
151+
map.remove(name);
152+
if (map.size() == 0) {
153+
mProvidersByClassPerUser.remove(optionalUserId);
154+
}
145155
}
146156
}
147157

0 commit comments

Comments
 (0)