Wait for disconnect when rebooting to userspace FB

Wait for the device to disconnect when rebooting to userspace fastboot.
This is a particular problem for USB-over-IP devices, which must tunnel
the USB commands over a relatively-slow network and thus will not
disconnect as quickly as local ones.

Only currently effective for Linux hosts, since LinuxUsbTransport is the
only transport that implements WaitForDisconnect().

Test Plan:
provision with a usbip-attached device, see flash succeed

Change-Id: Ia8903dfa6e40755377870fbeaef9162934f992a0
This commit is contained in:
Chris Sarbora 2024-03-22 09:32:02 -05:00
parent 7cf49320ba
commit 7199051aaf

View file

@ -1547,9 +1547,14 @@ bool is_userspace_fastboot() {
void reboot_to_userspace_fastboot() {
fb->RebootTo("fastboot");
if (fb->WaitForDisconnect() != fastboot::SUCCESS) {
die("Error waiting for USB disconnect.");
}
fb->set_transport(nullptr);
// Give the current connection time to close.
// Not all platforms support WaitForDisconnect. There also isn't a great way to tell whether
// or not WaitForDisconnect is supported. So, just wait a bit extra for everyone, in order to
// make sure that the device has had time to initiate its reboot and disconnect itself.
std::this_thread::sleep_for(std::chrono::seconds(1));
fb->set_transport(open_device());