]> sigrok.org Git - libsigrok.git/blobdiff - src/std.c
std_serial_dev_open: Remove SERIAL_NONBLOCK flag.
[libsigrok.git] / src / std.c
index 2319dfef9273f47524fd61bcebb7535f8f21135b..7d78578d5dfa802946ed3d279445d1788b0ffcd4 100644 (file)
--- a/src/std.c
+++ b/src/std.c
@@ -115,7 +115,7 @@ SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
  *
  * This function can be used to implement the dev_open() driver API
  * callback in drivers that use a serial port. The port is opened
- * with the SERIAL_RDWR and SERIAL_NONBLOCK flags.
+ * with the SERIAL_RDWR flag.
  *
  * If the open succeeded, the status field of the given sdi is set
  * to SR_ST_ACTIVE.
@@ -128,7 +128,7 @@ SR_PRIV int std_serial_dev_open(struct sr_dev_inst *sdi)
        struct sr_serial_dev_inst *serial;
 
        serial = sdi->conn;
-       if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK)
+       if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return SR_ERR;
 
        sdi->status = SR_ST_ACTIVE;
@@ -249,7 +249,8 @@ SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
 {
        struct drv_context *drvc;
        struct sr_dev_inst *sdi;
-       GSList *l;
+       struct sr_channel_group *cg;
+       GSList *l, *lcg;
        int ret;
 
        if (!(drvc = driver->priv))
@@ -278,9 +279,19 @@ SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
                                sr_scpi_free(sdi->conn);
                }
                if (clear_private)
+                       /* The helper function is responsible for freeing
+                        * its own sdi->priv! */
                        clear_private(sdi->priv);
                else
                        g_free(sdi->priv);
+
+               /* Channel groups */
+               for (lcg = sdi->channel_groups; lcg; lcg = lcg->next) {
+                       cg = lcg->data;
+                       g_free(cg->name);
+                       g_slist_free(cg->channels);
+                       g_free(cg);
+               }
                sr_dev_inst_free(sdi);
        }