Abort transfers on all pipes before closing them. This fixes the crash

when Bluetooth USB device is pulled out without stopping the stack first.

Submitted by:	Vladimir Grebenschikov vova at fbsd dot ru
MFC after:	1 week
This commit is contained in:
Maksim Yevmenkin 2008-10-03 22:40:42 +00:00
parent 4ec9dc4de2
commit 7469c6e5e4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183576

View File

@ -812,24 +812,29 @@ ubt_detach(device_t self)
/* Close pipes */
if (sc->sc_intr_pipe != NULL) {
usbd_abort_pipe(sc->sc_intr_pipe);
usbd_close_pipe(sc->sc_intr_pipe);
sc->sc_intr_pipe = NULL;
}
if (sc->sc_bulk_in_pipe != NULL) {
usbd_abort_pipe(sc->sc_bulk_in_pipe);
usbd_close_pipe(sc->sc_bulk_in_pipe);
sc->sc_bulk_in_pipe = NULL;
}
if (sc->sc_bulk_out_pipe != NULL) {
usbd_abort_pipe(sc->sc_bulk_out_pipe);
usbd_close_pipe(sc->sc_bulk_out_pipe);
sc->sc_bulk_out_pipe = NULL;
}
if (sc->sc_isoc_in_pipe != NULL) {
usbd_abort_pipe(sc->sc_isoc_in_pipe);
usbd_close_pipe(sc->sc_isoc_in_pipe);
sc->sc_isoc_in_pipe = NULL;
}
if (sc->sc_isoc_out_pipe != NULL) {
usbd_abort_pipe(sc->sc_isoc_out_pipe);
usbd_close_pipe(sc->sc_isoc_out_pipe);
sc->sc_isoc_out_pipe = NULL;
}