Fix problems with new PowerManager.reboot() implementation.
ShutdownThread.reboot() does return so we need to block after calling it
to prevent PowerManager.reboot() from returning.
Since PowerManager.reboot() can now take significantly longer than before,
we now ignore ANRs during shutdown.
Change-Id: Ibceeb265ae382567215f6a399108d8be3a7bbc95
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index fc6bfcd..d72416d 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -2205,32 +2205,28 @@
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!");
}
/**