Merge "Handle the race condition when calling uncrypt services." am: 42d25b5992 am: 86df8ecdf3 am: ade17dea88
am: 2a327506cf
Change-Id: I29cc6009fcd4d58a2f11adba425a6dafeeecb4ab
This commit is contained in:
@@ -25,4 +25,5 @@ interface IRecoverySystem {
|
||||
boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener);
|
||||
boolean setupBcb(in String command);
|
||||
boolean clearBcb();
|
||||
void rebootRecoveryWithCommand(in String command);
|
||||
}
|
||||
|
||||
@@ -700,28 +700,22 @@ public class RecoverySystem {
|
||||
* @throws IOException if something goes wrong.
|
||||
*/
|
||||
private static void bootCommand(Context context, String... args) throws IOException {
|
||||
synchronized (sRequestLock) {
|
||||
LOG_FILE.delete();
|
||||
LOG_FILE.delete();
|
||||
|
||||
StringBuilder command = new StringBuilder();
|
||||
for (String arg : args) {
|
||||
if (!TextUtils.isEmpty(arg)) {
|
||||
command.append(arg);
|
||||
command.append("\n");
|
||||
}
|
||||
StringBuilder command = new StringBuilder();
|
||||
for (String arg : args) {
|
||||
if (!TextUtils.isEmpty(arg)) {
|
||||
command.append(arg);
|
||||
command.append("\n");
|
||||
}
|
||||
|
||||
// Write the command into BCB (bootloader control block).
|
||||
RecoverySystem rs = (RecoverySystem) context.getSystemService(
|
||||
Context.RECOVERY_SERVICE);
|
||||
rs.setupBcb(command.toString());
|
||||
|
||||
// Having set up the BCB, go ahead and reboot.
|
||||
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||
pm.reboot(PowerManager.REBOOT_RECOVERY);
|
||||
|
||||
throw new IOException("Reboot failed (no permissions?)");
|
||||
}
|
||||
|
||||
// Write the command into BCB (bootloader control block) and boot from
|
||||
// there. Will not return unless failed.
|
||||
RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE);
|
||||
rs.rebootRecoveryWithCommand(command.toString());
|
||||
|
||||
throw new IOException("Reboot failed (no permissions?)");
|
||||
}
|
||||
|
||||
// Read last_install; then report time (in seconds) and I/O (in MiB) for
|
||||
@@ -915,6 +909,17 @@ public class RecoverySystem {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Talks to RecoverySystemService via Binder to set up the BCB command and
|
||||
* reboot into recovery accordingly.
|
||||
*/
|
||||
private void rebootRecoveryWithCommand(String command) {
|
||||
try {
|
||||
mService.rebootRecoveryWithCommand(command);
|
||||
} catch (RemoteException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internally, recovery treats each line of the command file as a separate
|
||||
* argv, so we only need to protect against newlines and nulls.
|
||||
|
||||
Reference in New Issue
Block a user