X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fsession.c;h=f253dbd8e9e98760b290841cff789917aa7cf942;hb=4b9e2532135a07cfda6e2ac7a68c69486411b2b7;hp=276f328a1b5ef9cd1ef11298a113fe6708fcd74e;hpb=92248e7821d6ed98390088dab3a4edd329ef414a;p=libsigrok.git diff --git a/src/session.c b/src/session.c index 276f328a..f253dbd8 100644 --- a/src/session.c +++ b/src/session.c @@ -409,7 +409,7 @@ static int sr_session_iteration(struct sr_session *session) struct source *source; GPollFD *pollfd; gintptr poll_object; -#if HAVE_LIBUSB_1_0 && !defined(G_OS_WIN32) +#if HAVE_LIBUSB_1_0 int64_t usb_timeout; int64_t usb_due; struct timeval tv; @@ -427,7 +427,7 @@ static int sr_session_iteration(struct sr_session *session) min_due = source->due; source->triggered = FALSE; } -#if HAVE_LIBUSB_1_0 && !defined(G_OS_WIN32) +#if HAVE_LIBUSB_1_0 usb_due = INT64_MAX; if (session->ctx->usb_source_present) { ret = libusb_get_next_timeout(session->ctx->libusb_ctx, &tv); @@ -506,8 +506,8 @@ static int sr_session_iteration(struct sr_session *session) revents = 0; due = source->due; -#if HAVE_LIBUSB_1_0 && !defined(G_OS_WIN32) - if (usb_due < due && source->poll_object +#if HAVE_LIBUSB_1_0 + if (usb_due < due && poll_object == (gintptr)session->ctx->libusb_ctx) due = usb_due; #endif @@ -1077,6 +1077,12 @@ SR_PRIV int sr_session_source_remove_internal(struct sr_session *session, g_array_remove_range(session->pollfds, fd_index, source->num_fds); g_array_remove_index(session->sources, i); + /* + * This is a bit of a hack. To be removed when + * porting over to the GLib main loop. + */ + if (poll_object == (gintptr)session->ctx->libusb_ctx) + session->ctx->usb_source_present = FALSE; return SR_OK; } fd_index += source->num_fds;