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

Commit 72972a75 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Synchronize to kill application when clear data" into main

parents 61e25300 7b612cc0
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -1282,4 +1282,15 @@ public abstract class ActivityManagerInternal {
     */
     */
    public abstract void addStartInfoTimestamp(int key, long timestampNs, int uid, int pid,
    public abstract void addStartInfoTimestamp(int key, long timestampNs, int uid, int pid,
            int userId);
            int userId);

    /**
     * It is similar {@link IActivityManager#killApplication(String, int, int, String, int)} but
     * it immediately stop the package.
     *
     * <p>Note: Do not call this method from inside PMS's lock, otherwise it'll run into
     * watchdog reset.
     * @hide
     */
    public abstract void killApplicationSync(String pkgName, int appId, int userId,
            String reason, int exitInfoReason);
}
}
+20 −0
Original line number Original line Diff line number Diff line
@@ -19975,6 +19975,26 @@ public class ActivityManagerService extends IActivityManager.Stub
            addStartInfoTimestampInternal(key, timestampNs, userId, uid);
            addStartInfoTimestampInternal(key, timestampNs, userId, uid);
        }
        }
        @Override
        public void killApplicationSync(String pkgName, int appId, int userId,
                String reason, int exitInfoReason) {
            if (pkgName == null) {
                return;
            }
            // Make sure the uid is valid.
            if (appId < 0) {
                Slog.w(TAG, "Invalid appid specified for pkg : " + pkgName);
                return;
            }
            synchronized (ActivityManagerService.this) {
                ActivityManagerService.this.forceStopPackageLocked(pkgName, appId,
                        /* callerWillRestart= */ false, /*purgeCache= */ false,
                        /* doit= */ true, /* evenPersistent= */ false,
                        /* uninstalling= */ false, /* packageStateStopped= */ false,
                        userId, reason, exitInfoReason);
            }
        }
    }
    }
    long inputDispatchingTimedOut(int pid, final boolean aboveSystem, TimeoutRecord timeoutRecord) {
    long inputDispatchingTimedOut(int pid, final boolean aboveSystem, TimeoutRecord timeoutRecord) {
+8 −2
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.pm;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.pm.Flags;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;


import dalvik.system.CloseGuard;
import dalvik.system.CloseGuard;
@@ -76,9 +77,14 @@ final class PackageFreezer implements AutoCloseable {
            ps = mPm.mSettings.getPackageLPr(mPackageName);
            ps = mPm.mSettings.getPackageLPr(mPackageName);
        }
        }
        if (ps != null) {
        if (ps != null) {
            if (Flags.waitApplicationKilled()) {
                mPm.killApplicationSync(ps.getPackageName(), ps.getAppId(), userId, killReason,
                        exitInfoReason);
            } else {
                mPm.killApplication(ps.getPackageName(), ps.getAppId(), userId, killReason,
                mPm.killApplication(ps.getPackageName(), ps.getAppId(), userId, killReason,
                        exitInfoReason);
                        exitInfoReason);
            }
            }
        }
        mCloseGuard.open("close");
        mCloseGuard.open("close");
    }
    }


+15 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import android.annotation.StringRes;
import android.annotation.UserIdInt;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.annotation.WorkerThread;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppOpsManager;
import android.app.AppOpsManager;
import android.app.ApplicationExitInfo;
import android.app.ApplicationExitInfo;
import android.app.ApplicationPackageManager;
import android.app.ApplicationPackageManager;
@@ -3132,6 +3133,20 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        }
        }
    }
    }


    void killApplicationSync(String pkgName, @AppIdInt int appId,
            @UserIdInt int userId, String reason, int exitInfoReason) {
        ActivityManagerInternal mAmi = LocalServices.getService(ActivityManagerInternal.class);
        if (mAmi != null) {
            if (Thread.holdsLock(mLock)) {
                // holds PM's lock, go back killApplication to avoid it run into watchdog reset.
                Slog.e(TAG, "Holds PM's locker, unable kill application synchronized");
                killApplication(pkgName, appId, userId, reason, exitInfoReason);
            } else {
                mAmi.killApplicationSync(pkgName, appId, userId, reason, exitInfoReason);
            }
        }
    }

    @Override
    @Override
    public void notifyPackageAdded(String packageName, int uid) {
    public void notifyPackageAdded(String packageName, int uid) {
        mPackageObserverHelper.notifyAdded(packageName, uid);
        mPackageObserverHelper.notifyAdded(packageName, uid);