Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 14267b16 authored by Hamza's avatar Hamza
Browse files

(b/278924166): log stack trace for debugging

Test: N/A

Change-Id: I48aab2e0d051be1ce89956dfd58b59c0ffffdbad
parent 7c2eb5f3
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -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");
        }
    }
}