aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-20 00:02:55 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-01-20 00:02:55 +0000
commit8a82ff71469a429f7fc394227434f979518effc1 (patch)
treef1c9c07e021abdc5029af6fe7d470e4fec82b4f8
parent44675c0e4a567c99e867273a67f5b00b6fd79f6d (diff)
parent7d0a4c1aab3b76ec82f6860632771a2bd1a20f83 (diff)
downloadcuttlefish-android13-d2-release.tar.gz
Snap for 9509315 from 7d0a4c1aab3b76ec82f6860632771a2bd1a20f83 to tm-d2-releaseandroid-13.0.0_r55android13-d2-release
Change-Id: I35ea8ec1f44c37c1ab650ef345687e051ac47ddc
-rw-r--r--guest/commands/bt_vhci_forwarder/main.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/guest/commands/bt_vhci_forwarder/main.cpp b/guest/commands/bt_vhci_forwarder/main.cpp
index 2f1aab2e7..d1bb58850 100644
--- a/guest/commands/bt_vhci_forwarder/main.cpp
+++ b/guest/commands/bt_vhci_forwarder/main.cpp
@@ -128,6 +128,9 @@ int main(int argc, char** argv) {
send(vhci_fd, HCI_ISODATA_PKT, raw_iso.data(), raw_iso.size());
},
[]() { LOG(INFO) << "HCI socket device disconnected"; });
+
+ bool before_first_command = true;
+
while (true) {
int ret = TEMP_FAILURE_RETRY(poll(fds, 2, -1));
if (ret < 0) {
@@ -141,6 +144,7 @@ int main(int argc, char** argv) {
if (c < 0) {
PLOG(ERROR) << "vhci to virtio-console failed";
}
+ before_first_command = false;
}
if (fds[1].revents & POLLHUP) {
LOG(ERROR) << "PollHUP";
@@ -148,6 +152,16 @@ int main(int argc, char** argv) {
continue;
}
if (fds[1].revents & (POLLIN | POLLERR)) {
+ if (before_first_command) {
+ // Drop any data left in the virtio-console from a previous reset.
+ ssize_t bytes = TEMP_FAILURE_RETRY(read(virtio_fd, buf, kBufferSize));
+ if (bytes < 0) {
+ LOG(ERROR) << "virtio_fd ready, but read failed " << strerror(errno);
+ } else {
+ LOG(INFO) << "Discarding " << bytes << " bytes from virtio_fd.";
+ }
+ continue;
+ }
// 'virtio-console to vhci' depends on H4Packetizer because vhci expects
// full packet, but the data from virtio-console could be partial.
h4.OnDataReady(virtio_fd);