diff --git a/services/core/java/com/android/server/am/AppExitInfoTracker.java b/services/core/java/com/android/server/am/AppExitInfoTracker.java index a09aa64476c17..df9417ee1301b 100644 --- a/services/core/java/com/android/server/am/AppExitInfoTracker.java +++ b/services/core/java/com/android/server/am/AppExitInfoTracker.java @@ -129,7 +129,7 @@ public final class AppExitInfoTracker { private final ProcessMap mData; /** A pool of raw {@link android.app.ApplicationExitInfo} records. */ - @GuardedBy("mService") + @GuardedBy("mLock") private final SynchronizedPool mRawRecordsPool; /** @@ -204,8 +204,7 @@ public final class AppExitInfoTracker { }); } - @GuardedBy("mService") - void scheduleNoteProcessDiedLocked(final ProcessRecord app) { + void scheduleNoteProcessDied(final ProcessRecord app) { if (app == null || app.info == null) { return; } @@ -214,11 +213,9 @@ public final class AppExitInfoTracker { if (!mAppExitInfoLoaded) { return; } + mKillHandler.obtainMessage(KillHandler.MSG_PROC_DIED, obtainRawRecordLocked(app)) + .sendToTarget(); } - // The current thread is holding the global lock, let's extract the info from it - // and schedule the info note task in the kill handler. - mKillHandler.obtainMessage(KillHandler.MSG_PROC_DIED, obtainRawRecordLocked(app)) - .sendToTarget(); } void scheduleNoteAppKill(final ProcessRecord app, final @Reason int reason, @@ -227,8 +224,6 @@ public final class AppExitInfoTracker { if (!mAppExitInfoLoaded) { return; } - } - synchronized (mService) { if (app == null || app.info == null) { return; } @@ -247,8 +242,6 @@ public final class AppExitInfoTracker { if (!mAppExitInfoLoaded) { return; } - } - synchronized (mService) { ProcessRecord app; synchronized (mService.mPidsSelfLocked) { app = mService.mPidsSelfLocked.get(pid); @@ -823,7 +816,7 @@ public final class AppExitInfoTracker { } @VisibleForTesting - @GuardedBy("mService") + @GuardedBy("mLock") ApplicationExitInfo obtainRawRecordLocked(ProcessRecord app) { ApplicationExitInfo info = mRawRecordsPool.acquire(); if (info == null) { @@ -850,7 +843,7 @@ public final class AppExitInfoTracker { } @VisibleForTesting - @GuardedBy("mService") + @GuardedBy("mLock") void recycleRawRecordLocked(ApplicationExitInfo info) { info.setProcessName(null); info.setDescription(null); @@ -1135,8 +1128,6 @@ public final class AppExitInfoTracker { ApplicationExitInfo raw = (ApplicationExitInfo) msg.obj; synchronized (mLock) { handleNoteProcessDiedLocked(raw); - } - synchronized (mService) { recycleRawRecordLocked(raw); } } @@ -1145,8 +1136,6 @@ public final class AppExitInfoTracker { ApplicationExitInfo raw = (ApplicationExitInfo) msg.obj; synchronized (mLock) { handleNoteAppKillLocked(raw); - } - synchronized (mService) { recycleRawRecordLocked(raw); } } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index a9d18e05e350b..6b165139aefd9 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -3773,7 +3773,7 @@ public final class ProcessList { } Watchdog.getInstance().processDied(app.processName, app.pid); - mAppExitInfoTracker.scheduleNoteProcessDiedLocked(app); + mAppExitInfoTracker.scheduleNoteProcessDied(app); } /**