diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2019-07-22 13:52:19 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-09 18:20:40 +0000 |
commit | 13eea9f02870a05253f86e4fc9ba4e35367950de (patch) | |
tree | 2416bc631cf4dc3aee594a1d2f78380a849892e7 /devices/src/usb | |
parent | f5a52516b1496533ef75ef181575faf891f8dc1a (diff) | |
download | crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar.gz crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar.bz2 crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar.lz crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar.xz crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.tar.zst crosvm-13eea9f02870a05253f86e4fc9ba4e35367950de.zip |
usb: clarify transfer cancellation API
Rather than having a get_canceller() function on UsbTransfer, make the submit function return the canceller. This makes it clear that the transfer can't be cancelled before it is submitted. BUG=None TEST=None Change-Id: Ice36c3096a1f8a5aafe93b5d5e27eb371183c19f Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1783599 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'devices/src/usb')
-rw-r--r-- | devices/src/usb/host_backend/utils.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/devices/src/usb/host_backend/utils.rs b/devices/src/usb/host_backend/utils.rs index 7d23bd4..bcbec20 100644 --- a/devices/src/usb/host_backend/utils.rs +++ b/devices/src/usb/host_backend/utils.rs @@ -58,17 +58,6 @@ pub fn submit_transfer<T: UsbTransferBuffer>( let mut state = xhci_transfer.state().lock(); match mem::replace(&mut *state, XhciTransferState::Cancelled) { XhciTransferState::Created => { - let canceller = usb_transfer.get_canceller(); - // TODO(jkwang) refactor canceller to return Cancel::Ok or Cancel::Err. - let cancel_callback = Box::new(move || match canceller.try_cancel() { - true => { - usb_debug!("cancel issued to libusb backend"); - } - false => { - usb_debug!("fail to cancel"); - } - }); - *state = XhciTransferState::Submitted { cancel_callback }; match device_handle.lock().submit_async_transfer(usb_transfer) { Err(e) => { error!("fail to submit transfer {:?}", e); @@ -76,7 +65,19 @@ pub fn submit_transfer<T: UsbTransferBuffer>( TransferStatus::NoDevice } // If it's submitted, we don't need to send on_transfer_complete now. - Ok(_) => return Ok(()), + Ok(canceller) => { + // TODO(jkwang) refactor canceller to return Cancel::Ok or Cancel::Err. + let cancel_callback = Box::new(move || match canceller.try_cancel() { + true => { + usb_debug!("cancel issued to libusb backend"); + } + false => { + usb_debug!("fail to cancel"); + } + }); + *state = XhciTransferState::Submitted { cancel_callback }; + return Ok(()); + } } } XhciTransferState::Cancelled => { |