sigrok-cli.c: Fix memory leak in parsing of hardware options
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Thu, 20 Dec 2012 03:53:51 +0000 (21:53 -0600)
committerUwe Hermann <uwe@hermann-uwe.de>
Tue, 1 Jan 2013 23:28:25 +0000 (00:28 +0100)
During parsing of hardware options, hash_to_hwopt() creates a GSList that is
passed to device_scan(). The list is discarded by device_scan() and never freed.
This is identified by valgrind as "definitely lost".

Call g_slist_free_full() on the list when it is no longer needed.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
sigrok-cli.c

index bb9305f6d521061dde7dac0966bab78735355e0c..70d3a59ee6cc2c3517c21baa84469619a129e255 100644 (file)
@@ -140,6 +140,12 @@ static GSList *hash_to_hwopt(GHashTable *hash)
        return opts;
 }
 
+static void free_hwopt(struct sr_hwopt *hwopt)
+{
+       g_free((void *)hwopt->value);
+       g_free(hwopt);
+}
+
 static GSList *device_scan(void)
 {
        struct sr_dev_driver **drivers, *driver;
@@ -174,6 +180,7 @@ static GSList *device_scan(void)
                                /* Unknown options, already logged. */
                                return NULL;
                devices = sr_driver_scan(driver, drvopts);
+               g_slist_free_full(drvopts, (GDestroyNotify)free_hwopt);
        } else {
                /* No driver specified, let them all scan on their own. */
                devices = NULL;