diff --git a/src/add-ons/kernel/busses/usb/uhci.cpp b/src/add-ons/kernel/busses/usb/uhci.cpp index f535e30d28..2b882f09e6 100644 --- a/src/add-ons/kernel/busses/usb/uhci.cpp +++ b/src/add-ons/kernel/busses/usb/uhci.cpp @@ -606,7 +606,7 @@ status_t UHCI::CancelQueuedTransfers(Pipe *pipe, bool force) { if (pipe->Type() & USB_OBJECT_ISO_PIPE) - return CancelQueuedIsochronousTransfers(pipe); + return CancelQueuedIsochronousTransfers(pipe, force); if (!Lock()) return B_ERROR; @@ -642,7 +642,7 @@ UHCI::CancelQueuedTransfers(Pipe *pipe, bool force) status_t -UHCI::CancelQueuedIsochronousTransfers(Pipe *pipe) +UHCI::CancelQueuedIsochronousTransfers(Pipe *pipe, bool force) { isochronous_transfer_data *current = fFirstIsochronousTransfer; @@ -656,6 +656,9 @@ UHCI::CancelQueuedIsochronousTransfers(Pipe *pipe) // the transfer. The FinishIsochronousThread will do the rest. for (int32 i = 0; i < packetCount; i++) current->descriptors[i]->status &= ~TD_STATUS_ACTIVE; + + // TODO: Use the force paramater in order to avoid calling + // invalid callbacks current->is_active = false; } diff --git a/src/add-ons/kernel/busses/usb/uhci.h b/src/add-ons/kernel/busses/usb/uhci.h index ffc3230b17..521a069b60 100644 --- a/src/add-ons/kernel/busses/usb/uhci.h +++ b/src/add-ons/kernel/busses/usb/uhci.h @@ -91,8 +91,8 @@ public: status_t Start(); virtual status_t SubmitTransfer(Transfer *transfer); -virtual status_t CancelQueuedTransfers(Pipe *pipe, bool force); - status_t CancelQueuedIsochronousTransfers(Pipe *pipe); +virtual status_t CancelQueuedTransfers(Pipe *pipe, bool force); + status_t CancelQueuedIsochronousTransfers(Pipe *pipe, bool force); status_t SubmitRequest(Transfer *transfer); status_t SubmitIsochronous(Transfer *transfer);