Deleted Added
full compact
1c1
< /* $FreeBSD: head/lib/libusb/libusb10_io.c 194676 2009-06-23 01:04:58Z thompsa $ */
---
> /* $FreeBSD: head/lib/libusb/libusb10_io.c 195560 2009-07-10 14:15:53Z thompsa $ */
42c42,165
< static int
---
> UNEXPORTED int
> usb_add_pollfd(libusb_context *ctx, int fd, short events)
> {
> struct usb_pollfd *pollfd;
>
> if (ctx == NULL)
> return (LIBUSB_ERROR_INVALID_PARAM);
>
> pollfd = malloc(sizeof(*pollfd));
> if (pollfd == NULL)
> return (LIBUSB_ERROR_NO_MEM);
>
> pollfd->pollfd.fd = fd;
> pollfd->pollfd.events = events;
>
> pthread_mutex_lock(&ctx->pollfds_lock);
> TAILQ_INSERT_TAIL(&ctx->pollfds, pollfd, list);
> pthread_mutex_unlock(&ctx->pollfds_lock);
>
> if (ctx->fd_added_cb)
> ctx->fd_added_cb(fd, events, ctx->fd_cb_user_data);
> return (0);
> }
>
> UNEXPORTED void
> usb_remove_pollfd(libusb_context *ctx, int fd)
> {
> struct usb_pollfd *pollfd;
> int found;
>
> found = 0;
> pthread_mutex_lock(&ctx->pollfds_lock);
>
> TAILQ_FOREACH(pollfd, &ctx->pollfds, list) {
> if (pollfd->pollfd.fd == fd) {
> found = 1;
> break ;
> }
> }
>
> if (found == 0) {
> pthread_mutex_unlock(&ctx->pollfds_lock);
> return ;
> }
>
> TAILQ_REMOVE(&ctx->pollfds, pollfd, list);
> pthread_mutex_unlock(&ctx->pollfds_lock);
> free(pollfd);
>
> if (ctx->fd_removed_cb)
> ctx->fd_removed_cb(fd, ctx->fd_cb_user_data);
> }
>
> UNEXPORTED void
> usb_handle_transfer_completion(struct usb_transfer *uxfer,
> enum libusb_transfer_status status)
> {
> libusb_transfer *xfer;
> libusb_context *ctx;
> int len;
>
> xfer = (struct libusb_transfer *) ((uint8_t *)uxfer +
> sizeof(struct usb_transfer));
> ctx = xfer->dev_handle->dev->ctx;
>
> pthread_mutex_lock(&ctx->flying_transfers_lock);
> TAILQ_REMOVE(&ctx->flying_transfers, uxfer, list);
> pthread_mutex_unlock(&ctx->flying_transfers_lock);
>
> if (status == LIBUSB_TRANSFER_COMPLETED && xfer->flags &
> LIBUSB_TRANSFER_SHORT_NOT_OK) {
> len = xfer->length;
> if (xfer->type == LIBUSB_TRANSFER_TYPE_CONTROL)
> len -= sizeof(libusb_control_setup);
> if (len != uxfer->transferred) {
> status = LIBUSB_TRANSFER_ERROR;
> }
> }
>
> xfer->status = status;
> xfer->actual_length = uxfer->transferred;
>
> if (xfer->callback)
> xfer->callback(xfer);
> if (xfer->flags & LIBUSB_TRANSFER_FREE_TRANSFER)
> libusb_free_transfer(xfer);
>
> pthread_mutex_lock(&ctx->event_waiters_lock);
> pthread_cond_broadcast(&ctx->event_waiters_cond);
> pthread_mutex_unlock(&ctx->event_waiters_lock);
> }
>
> UNEXPORTED void
> usb_handle_disconnect(struct libusb_device_handle *devh)
> {
> struct libusb_context *ctx;
> struct libusb_transfer *xfer;
> struct usb_transfer *cur;
> struct usb_transfer *to_cancel;
>
> ctx = devh->dev->ctx;
>
> while (1) {
> pthread_mutex_lock(&ctx->flying_transfers_lock);
> to_cancel = NULL;
> TAILQ_FOREACH(cur, &ctx->flying_transfers, list) {
> xfer = (struct libusb_transfer *) ((uint8_t *)cur +
> sizeof(struct usb_transfer));
> if (xfer->dev_handle == devh) {
> to_cancel = cur;
> break ;
> }
> }
> pthread_mutex_unlock(&ctx->flying_transfers_lock);
>
> if (to_cancel == NULL)
> break ;
>
> usb_handle_transfer_completion(to_cancel, LIBUSB_TRANSFER_NO_DEVICE);
> }
> return ;
> }
>
> UNEXPORTED int
46d168
< int ret;
48,50c170
< ret = libusb_get_next_timeout(ctx, &timeout);
<
< if (ret) {
---
> if (libusb_get_next_timeout(ctx, &timeout)) {
64c184
< static int
---
> UNEXPORTED int
78c198
< if (USB_LIST_EMPTY(&ctx->flying_transfers))
---
> if (TAILQ_EMPTY(&ctx->flying_transfers))
84c204
< LIST_FOREACH_ENTRY(xfer, &ctx->flying_transfers, list) {
---
> TAILQ_FOREACH(xfer, &ctx->flying_transfers, list) {
107c227
< static int
---
> UNEXPORTED int
113,115d232
< struct usb_transfer *cur;
< struct usb_transfer *cancel;
< struct libusb_transfer *xfer;
120d236
< int tmp;
126c242
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "handle_events enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "handle_events enter");
132c248
< LIST_FOREACH_ENTRY(ipollfd, &ctx->pollfds, list)
---
> TAILQ_FOREACH(ipollfd, &ctx->pollfds, list)
135c251
< fds = malloc(sizeof(*fds) * nfds);
---
> fds = alloca(sizeof(*fds) * nfds);
139c255
< LIST_FOREACH_ENTRY(ipollfd, &ctx->pollfds, list) {
---
> TAILQ_FOREACH(ipollfd, &ctx->pollfds, list) {
155,156c271
< if (ret == 0) {
< free(fds);
---
> if (ret == 0)
158,159c273
< } else if (ret == -1 && errno == EINTR) {
< free(fds);
---
> else if (ret == -1 && errno == EINTR)
161,162c275
< } else if (ret < 0) {
< free(fds);
---
> else if (ret < 0)
164d276
< }
177c289
< for (i = 0 ; i < nfds && ret > 0 ; i++) {
---
> for (i = 0, devh = NULL ; i < nfds && ret > 0 ; i++) {
184c296
< LIST_FOREACH_ENTRY(devh, &ctx->open_devs, list) {
---
> TAILQ_FOREACH(devh, &ctx->open_devs, list) {
191c303,304
< usb_handle_disconnect(devh);
---
> if (devh != NULL)
> usb_handle_disconnect(devh);
197,198c310,312
< dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "LIBUSB20_PROCESS");
< ret = libusb20_dev_process(devh->os_priv);
---
> DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "LIBUSB20_PROCESS");
> if (devh != NULL)
> ret = libusb20_dev_process(devh->os_priv);
213,214c327
< free(fds);
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "handle_events leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "handle_events leave");
226c339
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_try_lock_events enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_try_lock_events enter");
242c355
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_try_lock_events leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_try_lock_events leave");
250c363
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_events enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_events enter");
255c368
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_events leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_events leave");
262c375
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_events enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_events enter");
271c384
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_events leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_events leave");
280c393
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handling_ok enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handling_ok enter");
289c402
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handling_ok leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handling_ok leave");
299c412
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handler_active enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handler_active enter");
308c421
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handler_active leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_event_handler_active leave");
316c429
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_event_waiters enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_event_waiters enter");
320c433
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_event_waiters leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_lock_event_waiters leave");
327c440
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_event_waiters enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_event_waiters enter");
331c444
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_event_waiters leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_unlock_event_waiters leave");
341c454
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_wait_for_event enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_wait_for_event enter");
366c479
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_wait_for_event leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_wait_for_event leave");
373d485
< struct timeval timeout;
378c490
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout enter");
405c517
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout leave");
416c528
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events enter");
422c534
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events leave");
433c545
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_locked enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_locked enter");
442c554
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_locked leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_locked leave");
457c569
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_next_timeout enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_next_timeout enter");
461c573
< if (USB_LIST_EMPTY(&ctx->flying_transfers)) {
---
> if (TAILQ_EMPTY(&ctx->flying_transfers)) {
466c578
< LIST_FOREACH_ENTRY(xfer, &ctx->flying_transfers, list) {
---
> TAILQ_FOREACH(xfer, &ctx->flying_transfers, list) {
492c604
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_next_timeout leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_next_timeout leave");
502c614
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_set_pollfd_notifiers enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_set_pollfd_notifiers enter");
508c620
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_set_pollfd_notifiers leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_set_pollfd_notifiers leave");
519c631
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_pollfds enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_pollfds enter");
523c635
< LIST_FOREACH_ENTRY(pollfd, &ctx->pollfds, list)
---
> TAILQ_FOREACH(pollfd, &ctx->pollfds, list)
533c645
< LIST_FOREACH_ENTRY(pollfd, &ctx->pollfds, list)
---
> TAILQ_FOREACH(pollfd, &ctx->pollfds, list)
537c649
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_pollfds leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_get_pollfds leave");
551c663
< dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "CALLBACK ENTER");
---
> DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "CALLBACK ENTER");
571c683
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_control_transfer enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_control_transfer enter");
640c752
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_control_transfer leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_control_transfer leave");
661a774
> GET_CONTEXT(ctx);
672a786
> DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "SUBMIT_TRANSFER");
674a789
> DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "SUBMIT_TRANSFER FAILED %i", ret);
690a806
> DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "xfer->status %i", xfer->status);
719c835
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer enter");
724c840
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer leave");
741c857
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer enter");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer enter");
746c862
< dprintf(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer leave");
---
> DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer leave");