From 14267b16c77f76ba7928b2b22a86acfffbf6e97d Mon Sep 17 00:00:00 2001 From: Hamza Date: Tue, 2 May 2023 15:51:52 +0000 Subject: [PATCH] (b/278924166): log stack trace for debugging Test: N/A Change-Id: I48aab2e0d051be1ce89956dfd58b59c0ffffdbad --- .../DevicePolicyManagerService.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 4443b181c9b90..f11e8e0a5ab89 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -3195,6 +3195,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { final ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle); DevicePolicyData policy = getUserData(userHandle); if (admin != null && !policy.mRemovingAdmins.contains(adminReceiver)) { + Slogf.d(LOG_TAG, "Adding " + adminReceiver + " for user " + userHandle + + " to list of removing admins."); + logStackTrace("removeActiveAdminLocked"); + policy.mRemovingAdmins.add(adminReceiver); sendAdminCommandLocked(admin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED, @@ -18377,7 +18381,15 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { pushActiveAdminPackagesLocked(userHandle); saveSettingsLocked(userHandle); updateMaximumTimeToLockLocked(userHandle); + + Slogf.d(LOG_TAG, + "Removing device admin " + adminReceiver + " from user " + userHandle); + logStackTrace("removeAdminArtifacts"); + policy.mRemovingAdmins.remove(adminReceiver); + Slogf.d(LOG_TAG, "Current state of DevicePolicyData#mRemovingAdmins for user " + + userHandle + ": " + policy.mRemovingAdmins); + pushScreenCapturePolicy(userHandle); Slogf.i(LOG_TAG, "Device admin " + adminReceiver + " removed from user " + userHandle); @@ -24272,4 +24284,28 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return getRoleHolderPackageNameOnUser( RoleManager.ROLE_FINANCED_DEVICE_KIOSK, UserHandle.USER_ALL); } + + /** + * TODO (b/278924166): this method is added for debugging the specified bug. + * Remove once fixed. + **/ + private void logStackTrace(String methodName) { + try { + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + String stackMethod; + StringBuilder stackTrace = new StringBuilder(); + for (StackTraceElement s : stackTraceElements) { + stackMethod = s.getMethodName(); + if (stackMethod == null || stackMethod.equals("getThreadStackTrace") + || stackMethod.equals("getStackTrace") + || stackMethod.equals("logStackTrace")) { + continue; + } + stackTrace.append(s.getMethodName() + ":" + s.getLineNumber() + "\n"); + } + Slogf.d(LOG_TAG, "StackTrace for " + methodName + ": \n" + stackTrace); + } catch (Exception e) { + Slogf.d(LOG_TAG, "Unable to get stacktrace"); + } + } }