Do not set waitForDebugger if the process to be debugged already started
For non-persistent debug settings, mDebugApp and mWaitForDebugger flags will only be restored when we get attachApplication. If the process is already running, we can't wait for debugger and there will be no attachApplication calls coming. We should leave the settings unmodified, otherwise after two such calls, both mDebugApp and mOrigDebugApp will point to the same app, and the debug settings can never be restored. bug: 27931552 Change-Id: Id53e21bbe154f45bf2ca12bb5d7fd56279bae653
This commit is contained in:
@@ -1097,7 +1097,21 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
||||
// Don't debug things in the system process
|
||||
if (!aInfo.processName.equals("system")) {
|
||||
if ((startFlags & ActivityManager.START_FLAG_DEBUG) != 0) {
|
||||
mService.setDebugApp(aInfo.processName, true, false);
|
||||
final ProcessRecord app = mService.getProcessRecordLocked(
|
||||
aInfo.processName, aInfo.applicationInfo.uid, true);
|
||||
// If the process already started, we can't wait for debugger and shouldn't
|
||||
// modify the debug settings.
|
||||
// For non-persistent debug, normally we set the debug app here, and restores
|
||||
// to the original at attachApplication time. However, if the app process
|
||||
// already exists, we won't get another attachApplication, and the debug setting
|
||||
// never gets restored. Furthermore, if we get two such calls back-to-back,
|
||||
// both mOrigDebugApp and mDebugApp will become the same app, and it won't be
|
||||
// cleared even if we get attachApplication after the app process is killed.
|
||||
if (app == null || app.thread == null) {
|
||||
mService.setDebugApp(aInfo.processName, true, false);
|
||||
} else {
|
||||
Slog.w(TAG, "Ignoring waitForDebugger because process already exists");
|
||||
}
|
||||
}
|
||||
|
||||
if ((startFlags & ActivityManager.START_FLAG_NATIVE_DEBUGGING) != 0) {
|
||||
|
||||
Reference in New Issue
Block a user