diff options
author | 2022-06-29 16:15:19 +0800 | |
---|---|---|
committer | 2022-07-13 09:24:18 +0800 | |
commit | 11a19e4c715cb6a7fbbfd001a59a743c6e18384c (patch) | |
tree | 21185eb66b7a41e3777ac6e41c8f32dad8c36b2d | |
parent | 4b7206b8d83aa5e4475b0d436bde8395d529b73c (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.java | 15 |
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; } } |