summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-07-17 05:11:39 +0200
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-07-17 05:11:39 +0200
commit5a6cde8b02d860932a7e415990d3ec00539bdd98 (patch)
tree11049890be096b1f457b7189d81942bd67310dc1
parentSnap for 5674462 from cdbd84de26bb213fee6d8560976d9b99eea75f77 to qt-release (diff)
parentminadbd sends heartbeat to rescue service for getprop command. (diff)
downloadandroid_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar.gz
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar.bz2
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar.lz
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar.xz
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.tar.zst
android_bootable_recovery-5a6cde8b02d860932a7e415990d3ec00539bdd98.zip
-rw-r--r--install/adb_install.cpp4
-rw-r--r--minadbd/minadbd_services.cpp8
-rw-r--r--minadbd/minadbd_types.h1
3 files changed, 12 insertions, 1 deletions
diff --git a/install/adb_install.cpp b/install/adb_install.cpp
index 4dd1f1b09..9497df501 100644
--- a/install/adb_install.cpp
+++ b/install/adb_install.cpp
@@ -363,11 +363,13 @@ int ApplyFromAdb(Device* device, bool rescue_mode, Device::BuiltinAction* reboot
"\n\nNow send the package you want to apply\n"
"to the device with \"adb sideload <filename>\"...\n");
} else {
- ui->Print("\n\nWaiting for rescue commands...\n");
command_map.emplace(MinadbdCommand::kWipeData, [&device]() {
bool result = WipeData(device, false);
return std::make_pair(result, true);
});
+ command_map.emplace(MinadbdCommand::kNoOp, []() { return std::make_pair(true, true); });
+
+ ui->Print("\n\nWaiting for rescue commands...\n");
}
CreateMinadbdServiceAndExecuteCommands(ui, command_map, rescue_mode);
diff --git a/minadbd/minadbd_services.cpp b/minadbd/minadbd_services.cpp
index 1c4c0f494..6c10274dc 100644
--- a/minadbd/minadbd_services.cpp
+++ b/minadbd/minadbd_services.cpp
@@ -173,6 +173,14 @@ static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) {
if (!android::base::WriteFully(sfd, result.data(), result.size())) {
exit(kMinadbdHostSocketIOError);
}
+
+ // Send heartbeat signal to keep the rescue service alive.
+ if (!WriteCommandToFd(MinadbdCommand::kNoOp, minadbd_socket)) {
+ exit(kMinadbdSocketIOError);
+ }
+ if (MinadbdCommandStatus status; !WaitForCommandStatus(minadbd_socket, &status)) {
+ exit(kMinadbdMessageFormatError);
+ }
}
// Reboots into the given target. We don't reboot directly from minadbd, but going through recovery
diff --git a/minadbd/minadbd_types.h b/minadbd/minadbd_types.h
index 99fd45e83..002523f1f 100644
--- a/minadbd/minadbd_types.h
+++ b/minadbd/minadbd_types.h
@@ -53,6 +53,7 @@ enum class MinadbdCommand : uint32_t {
kRebootRescue = 6,
kWipeCache = 7,
kWipeData = 8,
+ kNoOp = 9,
// Last but invalid command.
kError,