summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2016-12-01 18:56:29 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-12-01 20:00:10 -0800
commit35c5e0fa42b44a54f665d01db25e93edc8f0f2b2 (patch)
treeff956feb131376cf6ab8128f2302ccb43fadd4e1
parent57d8666fa137c2ab0b9c3d6c7e1d58b0a82645c2 (diff)
downloadchrome-ec-35c5e0fa42b44a54f665d01db25e93edc8f0f2b2.tar.gz
usb_updater: close connection when no data is transferred
When usb_updater is invoked with the '-f' option and without specifying the binary file to transmit, the cr50 still enters the data transfer mode, even though the host is not transferring anything. As a result cr50 stays in the 'rx_outside_block' state until timeout expires. Another usb_updater invocation fails if attempted before timeout expiration. The UPGRADE_DONE PDU sent by the host causes the state machine to switch to the idle state immediately. BRANCH=none BUG=none TEST=ran the following commands: usb_updater -f && usb_updater -f the second invocation used to fail before this change, now it succeeds. Change-Id: Iceafeb30de6011975fbf47dabc7c6c494177c0f7 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/415554 Reviewed-by: Bill Richardson <wfrichar@chromium.org>
-rw-r--r--extra/usb_updater/usb_updater.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/extra/usb_updater/usb_updater.c b/extra/usb_updater/usb_updater.c
index 71ca80a822..a6371b2cf4 100644
--- a/extra/usb_updater/usb_updater.c
+++ b/extra/usb_updater/usb_updater.c
@@ -1280,7 +1280,10 @@ int main(int argc, char *argv[])
transferred_sections = transfer_and_reboot(&td, data, data_len);
free(data);
}
+
if (td.ep_type == usb_xfer) {
+ if (!data)
+ send_done(&td.uep);
libusb_close(td.uep.devh);
libusb_exit(NULL);
}