X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fusb.c;h=5038441cc97c3db869ff5969097baaa6e36e439a;hb=89efe06460024c2a33e57178f5812bf23c2f9888;hp=7fe1eff6e5b0bdba7608127ecbd065d39dcd6bc5;hpb=c1aae90038456a61d0f9313d34e6107c3440d3e7;p=libsigrok.git diff --git a/src/usb.c b/src/usb.c index 7fe1eff6..5038441c 100644 --- a/src/usb.c +++ b/src/usb.c @@ -177,6 +177,13 @@ SR_PRIV int sr_usb_open(libusb_context *usb_ctx, struct sr_usb_dev_inst *usb) return ret; } +SR_PRIV void sr_usb_close(struct sr_usb_dev_inst *usb) +{ + libusb_close(usb->devhdl); + usb->devhdl = NULL; + sr_dbg("Closed USB device %d.%d.", usb->bus, usb->address); +} + #ifdef _WIN32 /* Thread used to run libusb_wait_for_event() and set a pollable event. */ static gpointer usb_thread(gpointer data) @@ -244,6 +251,7 @@ SR_PRIV int usb_source_add(struct sr_session *session, struct sr_context *ctx, /* Add event, set by USB wait thread, to session poll set. */ ctx->usb_pollfd.fd = ctx->usb_wait_complete_event; ctx->usb_pollfd.events = G_IO_IN; + ctx->usb_pollfd.revents = 0; ctx->usb_cb = cb; ctx->usb_cb_data = cb_data; sr_session_source_add_pollfd(session, &ctx->usb_pollfd, timeout,