Loading core/java/android/app/ActivityManagerInternal.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -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); } } services/core/java/com/android/server/am/ActivityManagerService.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -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) { services/core/java/com/android/server/pm/PackageFreezer.java +8 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); } } Loading services/core/java/com/android/server/pm/PackageManagerService.java +15 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading
core/java/android/app/ActivityManagerInternal.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -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); } }
services/core/java/com/android/server/am/ActivityManagerService.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -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) {
services/core/java/com/android/server/pm/PackageFreezer.java +8 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +15 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading