]> sigrok.org Git - libsigrok.git/commitdiff
session: Fix USB timeout handling
authorDaniel Elstner <redacted>
Sun, 30 Aug 2015 10:20:03 +0000 (12:20 +0200)
committerDaniel Elstner <redacted>
Thu, 3 Sep 2015 17:37:09 +0000 (19:37 +0200)
In sr_session_iteration(), remove the inverted evaluation of the
block parameter if a USB source is present. This stops the deluge
of USB event callbacks due to the timeout always being zero.

Also, just for cleanliness, initialize the revents member of each
GPollFD instance to zero.

src/hardware/beaglelogic/api.c
src/session.c
src/usb.c

index 12af5c1db6660891406128b93879f8409ced74fd..604849c46ee2872183b8a736ec7e35a63da1b606 100644 (file)
@@ -165,6 +165,7 @@ static int dev_open(struct sr_dev_inst *sdi)
        /* Set fd and local attributes */
        devc->pollfd.fd = devc->fd;
        devc->pollfd.events = G_IO_IN;
+       devc->pollfd.revents = 0;
 
        /* Get the default attributes */
        beaglelogic_get_samplerate(devc);
index 20c9ce5fcea48aaa9bc75bb7cecf050276dbc829..499025b5880acd4cb644edf4d67e8bd381d5e2c7 100644 (file)
@@ -389,7 +389,6 @@ static int sr_session_iteration(struct sr_session *session, gboolean block)
 
 #ifdef HAVE_LIBUSB_1_0
        if (session->ctx->usb_source_present) {
-               timeout = block ? 0 : session->source_timeout;
                ret = libusb_get_next_timeout(session->ctx->libusb_ctx, &tv);
                if (ret < 0) {
                        sr_err("Error getting libusb timeout: %s",
@@ -856,6 +855,7 @@ SR_API int sr_session_source_add(struct sr_session *session, int fd,
 
        p.fd = fd;
        p.events = events;
+       p.revents = 0;
 
        return _sr_session_source_add(session, &p, timeout, cb, cb_data, (gintptr)fd);
 }
@@ -908,6 +908,7 @@ SR_API int sr_session_source_add_channel(struct sr_session *session,
 #else
        p.fd = g_io_channel_unix_get_fd(channel);
        p.events = events;
+       p.revents = 0;
 #endif
 
        return _sr_session_source_add(session, &p, timeout, cb, cb_data, (gintptr)channel);
index f5b20c99cc02e61893a6654c67801ef8ade5f594..5038441cc97c3db869ff5969097baaa6e36e439a 100644 (file)
--- a/src/usb.c
+++ b/src/usb.c
@@ -251,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,