From db8fb7ca7365e29cc2853745301e15830bf07cf6 Mon Sep 17 00:00:00 2001 From: Evan Severson Date: Thu, 11 Mar 2021 13:21:28 -0800 Subject: [PATCH] Fix lock contention in AppOpsService Credit to our partner Samsung for suggesting this fix. Test: None Fixes: 181639255 Change-Id: I556ce9caa45e2cbea93fed9c7c27bd16e32ec883 --- .../server/appop/HistoricalRegistry.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/appop/HistoricalRegistry.java b/services/core/java/com/android/server/appop/HistoricalRegistry.java index 22d628b8e7899..2c25476153c16 100644 --- a/services/core/java/com/android/server/appop/HistoricalRegistry.java +++ b/services/core/java/com/android/server/appop/HistoricalRegistry.java @@ -384,11 +384,10 @@ final class HistoricalRegistry { callback.sendResult(new Bundle()); return; } - mPersistence.collectHistoricalOpsDLocked(result, uid, packageName, - attributionTag, - opNames, filter, beginTimeMillis, endTimeMillis, flags); - } + mPersistence.collectHistoricalOpsDLocked(result, uid, packageName, + attributionTag, + opNames, filter, beginTimeMillis, endTimeMillis, flags); } } @@ -576,19 +575,19 @@ final class HistoricalRegistry { Slog.e(LOG_TAG, "Interaction before persistence initialized"); return; } - final List history = mPersistence.readHistoryDLocked(); - clearHistoricalRegistry(); - if (history != null) { - final int historySize = history.size(); - for (int i = 0; i < historySize; i++) { - final HistoricalOps ops = history.get(i); - ops.offsetBeginAndEndTime(offsetMillis); - } - if (offsetMillis < 0) { - pruneFutureOps(history); - } - mPersistence.persistHistoricalOpsDLocked(history); + } + final List history = mPersistence.readHistoryDLocked(); + clearHistoricalRegistry(); + if (history != null) { + final int historySize = history.size(); + for (int i = 0; i < historySize; i++) { + final HistoricalOps ops = history.get(i); + ops.offsetBeginAndEndTime(offsetMillis); } + if (offsetMillis < 0) { + pruneFutureOps(history); + } + mPersistence.persistHistoricalOpsDLocked(history); } } }