summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author ot903277 <ot_youyao.hu@mediatek.com> 2022-06-29 16:15:19 +0800
committer Chuanghua Zhao <chuanghua.zhao@mediatek.com> 2022-07-13 09:24:18 +0800
commit11a19e4c715cb6a7fbbfd001a59a743c6e18384c (patch)
tree21185eb66b7a41e3777ac6e41c8f32dad8c36b2d
parent4b7206b8d83aa5e4475b0d436bde8395d529b73c (diff)
Fix weak global reference overflow
When the last item of sRunningAttributionSources is removed, the current check condition will cause the process of removing sRunningAttributionSources stopped and return directly, bring in weak global reference table overflow. Change the order for smooth removal. Bug: 218794347 Test: run audio stress test pass Change-Id: I39072f3b72f0be6d6debbcbc948d7a940ad92785
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java15
1 files changed, 10 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 290f4aea498e..336c27d98ee1 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -5689,16 +5689,21 @@ public class PermissionManagerService extends IPermissionManager.Stub {
appOpsManager.finishProxyOp(AppOpsManager.opToPublicName(op),
resolvedAttributionSource, skipCurrentFinish);
}
-
- if (next == null || next.getNext() == null) {
- return;
- }
-
RegisteredAttribution registered =
sRunningAttributionSources.remove(current.getToken());
if (registered != null) {
registered.unregister();
}
+
+ if (next == null || next.getNext() == null) {
+ if (next != null) {
+ registered = sRunningAttributionSources.remove(next.getToken());
+ if (registered != null) {
+ registered.unregister();
+ }
+ }
+ return;
+ }
current = next;
}
}