]> sigrok.org Git - libsigrok.git/commitdiff
colead-slm: Mark serial read calls as nonblocking.
authorMartin Ling <redacted>
Sun, 21 Sep 2014 16:54:18 +0000 (17:54 +0100)
committerUwe Hermann <redacted>
Wed, 24 Sep 2014 21:30:01 +0000 (23:30 +0200)
This is an odd one. These calls are made from a receive handler so should not
block, and appear to be setup correctly to handle partial reads or no data
available. However, the driver was not opening the port with SERIAL_NONBLOCK
so these calls would have been blocking. Make them nonblocking.

src/hardware/colead-slm/protocol.c

index 12a71546bb9f65de328255b8e489a2fed062dc33..6b89ea14f512aeb9202e74f8f5e5a424801c0c7b 100644 (file)
@@ -201,7 +201,7 @@ SR_PRIV int colead_slm_receive_data(int fd, int revents, void *cb_data)
 
        serial = sdi->conn;
        if (devc->state == IDLE) {
-               if (serial_read(serial, buf, 128) != 1 || buf[0] != 0x10)
+               if (serial_read_nonblocking(serial, buf, 128) != 1 || buf[0] != 0x10)
                        /* Nothing there, or caught the tail end of a previous packet,
                         * or some garbage. Unless it's a single "data ready" byte,
                         * we don't want it. */
@@ -214,7 +214,7 @@ SR_PRIV int colead_slm_receive_data(int fd, int revents, void *cb_data)
                        devc->buflen = 0;
                }
        } else {
-               len = serial_read(serial, devc->buf + devc->buflen,
+               len = serial_read_nonblocking(serial, devc->buf + devc->buflen,
                                10 - devc->buflen);
                if (len < 1)
                        return TRUE;