diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index fc6bfcd72a90c..d72416d8206be 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -2205,32 +2205,28 @@ class PowerManagerService extends IPowerManager.Stub if (mHandler == null || !ActivityManagerNative.isSystemReady()) { throw new IllegalStateException("Too early to call reboot()"); } - + final String finalReason = reason; Runnable runnable = new Runnable() { public void run() { synchronized (this) { ShutdownThread.reboot(mContext, finalReason, false); - // if we get here we failed - notify(); } } }; - + // ShutdownThread must run on a looper capable of displaying the UI. mHandler.post(runnable); - // block until we reboot or fail. - // throw an exception if we failed to reboot + // PowerManager.reboot() is documented not to return so just wait for the inevitable. synchronized (runnable) { - try { - runnable.wait(); - } catch (InterruptedException e) { + while (true) { + try { + runnable.wait(); + } catch (InterruptedException e) { + } } } - - // if we get here we failed - throw new IllegalStateException("unable to reboot!"); } /** diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index f6289ae3abb61..8866bbd26d8d9 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -4708,7 +4708,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen final void appNotRespondingLocked(ProcessRecord app, HistoryRecord activity, HistoryRecord parent, final String annotation) { - if (app.notResponding || app.crashing) { + // PowerManager.reboot() can block for a long time, so ignore ANRs while shutting down. + if (mShuttingDown || app.notResponding || app.crashing) { return; }