DO NOT MERGE: Fix deadlock in AcitivityManagerService.
Don't hold mPidsSelfLocked lock when calling cleanUpApplicationRecordLocked. Bug: 31463143 Change-Id: I421962cbfd7c466662edcef805c3e27321dc5a98
This commit is contained in:
@@ -3067,16 +3067,19 @@ public final class ActivityManagerService extends ActivityManagerNative
|
|||||||
app.killed = false;
|
app.killed = false;
|
||||||
app.killedByAm = false;
|
app.killedByAm = false;
|
||||||
checkTime(startTime, "startProcess: starting to update pids map");
|
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) {
|
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);
|
this.mPidsSelfLocked.put(startResult.pid, app);
|
||||||
if (isActivityProcess) {
|
if (isActivityProcess) {
|
||||||
Message msg = mHandler.obtainMessage(PROC_START_TIMEOUT_MSG);
|
Message msg = mHandler.obtainMessage(PROC_START_TIMEOUT_MSG);
|
||||||
|
|||||||
Reference in New Issue
Block a user