diff options
author | 2010-12-17 23:14:00 +0000 | |
---|---|---|
committer | 2010-12-17 23:14:00 +0000 | |
commit | 6187728efb2a0f5a57d5e220f80aeb5b13e61b44 (patch) | |
tree | 71cee7b7a682f15d7c48fa187890893743377508 | |
parent | - use nitems() (diff) | |
download | wireguard-openbsd-6187728efb2a0f5a57d5e220f80aeb5b13e61b44.tar.xz wireguard-openbsd-6187728efb2a0f5a57d5e220f80aeb5b13e61b44.zip |
don't catch signals in usbd_{bulk,intr}_transfer if a timeout is
set. no other transfer methods catch signals, and it is not possible
to restart these transfers reliably.
-rw-r--r-- | sys/dev/usb/usbdi_util.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/dev/usb/usbdi_util.c b/sys/dev/usb/usbdi_util.c index d00f777dbba..2954c5e89bf 100644 --- a/sys/dev/usb/usbdi_util.c +++ b/sys/dev/usb/usbdi_util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdi_util.c,v 1.25 2008/06/26 05:42:19 ray Exp $ */ +/* $OpenBSD: usbdi_util.c,v 1.26 2010/12/17 23:14:00 jakemsr Exp $ */ /* $NetBSD: usbdi_util.c,v 1.40 2002/07/11 21:14:36 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi_util.c,v 1.14 1999/11/17 22:33:50 n_hibma Exp $ */ @@ -426,7 +426,7 @@ usbd_bulk_transfer(usbd_xfer_handle xfer, usbd_pipe_handle pipe, u_int16_t flags, u_int32_t timeout, void *buf, u_int32_t *size, char *lbl) { usbd_status err; - int s, error; + int s, error, pri; usbd_setup_xfer(xfer, pipe, 0, buf, *size, flags, timeout, usbd_bulk_transfer_cb); @@ -437,7 +437,8 @@ usbd_bulk_transfer(usbd_xfer_handle xfer, usbd_pipe_handle pipe, splx(s); return (err); } - error = tsleep((caddr_t)xfer, PZERO | PCATCH, lbl, 0); + pri = timeout == 0 ? (PZERO | PCATCH) : PZERO; + error = tsleep((caddr_t)xfer, pri, lbl, 0); splx(s); if (error) { DPRINTF(("usbd_bulk_transfer: tsleep=%d\n", error)); @@ -467,7 +468,7 @@ usbd_intr_transfer(usbd_xfer_handle xfer, usbd_pipe_handle pipe, u_int16_t flags, u_int32_t timeout, void *buf, u_int32_t *size, char *lbl) { usbd_status err; - int s, error; + int s, error, pri; usbd_setup_xfer(xfer, pipe, 0, buf, *size, flags, timeout, usbd_intr_transfer_cb); @@ -478,7 +479,8 @@ usbd_intr_transfer(usbd_xfer_handle xfer, usbd_pipe_handle pipe, splx(s); return (err); } - error = tsleep(xfer, PZERO | PCATCH, lbl, 0); + pri = timeout == 0 ? (PZERO | PCATCH) : PZERO; + error = tsleep(xfer, pri, lbl, 0); splx(s); if (error) { DPRINTF(("usbd_intr_transfer: tsleep=%d\n", error)); |