Merge "Fix system_server crash while iterating CookieTagMap"

This commit is contained in:
Maciej Żenczykowski
2022-02-19 21:41:29 +00:00
committed by Gerrit Code Review

View File

@@ -1875,7 +1875,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void deleteKernelTagData(int uid) { private void deleteKernelTagData(int uid) {
try { try {
mCookieTagMap.forEach((key, value) -> { mCookieTagMap.forEach((key, value) -> {
if (value.uid == uid) { // If SkDestroyListener deletes the socket tag while this code is running,
// forEach will either restart iteration from the beginning or return null,
// depending on when the deletion happens.
// If it returns null, continue iteration to delete the data and in fact it would
// just iterate from first key because BpfMap#getNextKey would return first key
// if the current key is not exist.
if (value != null && value.uid == uid) {
try { try {
mCookieTagMap.deleteEntry(key); mCookieTagMap.deleteEntry(key);
} catch (ErrnoException e) { } catch (ErrnoException e) {