diff options
| author | 2016-09-19 21:03:18 +0000 | |
|---|---|---|
| committer | 2016-09-19 21:03:18 +0000 | |
| commit | b4ecfb9df195aa75f20fadf0a00e7c9f022c60c4 (patch) | |
| tree | 3dd7f610aa0680916371249d9a6e1cc9154f1725 | |
| parent | 3652ae7d6dec2572703e0c46eca6c940eeb47f44 (diff) | |
| parent | 44c9e2f4bffafe8fcc8cad24a4779e629613db5f (diff) | |
Fix deadlock in AcitivityManagerService. am: 67e05b4d28
am: 44c9e2f4bf
Change-Id: I22ce07b7b273cef869ddcebee029c15316ec9c1c
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f65fab8d98aa..91f493c98e2d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3847,16 +3847,19 @@ public final class ActivityManagerService extends ActivityManagerNative app.killed = false; app.killedByAm = false; checkTime(startTime, "startProcess: starting to update pids map"); + ProcessRecord oldApp; + synchronized (mPidsSelfLocked) { + oldApp = mPidsSelfLocked.get(startResult.pid); + } + // If there is already an app occupying that pid that hasn't been cleaned up + if (oldApp != null && !app.isolated) { + // Clean up anything relating to this pid first + Slog.w(TAG, "Reusing pid " + startResult.pid + + " while app is still mapped to it"); + cleanUpApplicationRecordLocked(oldApp, false, false, -1, + true /*replacingPid*/); + } synchronized (mPidsSelfLocked) { - ProcessRecord oldApp; - // If there is already an app occupying that pid that hasn't been cleaned up - if ((oldApp = mPidsSelfLocked.get(startResult.pid)) != null && !app.isolated) { - // Clean up anything relating to this pid first - Slog.w(TAG, "Reusing pid " + startResult.pid - + " while app is still mapped to it"); - cleanUpApplicationRecordLocked(oldApp, false, false, -1, - true /*replacingPid*/); - } this.mPidsSelfLocked.put(startResult.pid, app); if (isActivityProcess) { Message msg = mHandler.obtainMessage(PROC_START_TIMEOUT_MSG); |