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

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

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)