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>
This commit is contained in:
Mike Lockwood
2010-03-12 07:55:23 -05:00
parent a91e972752
commit b62f959430
2 changed files with 10 additions and 13 deletions

View File

@@ -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!");
}
/**