]> sigrok.org Git - sigrok-cli.git/blobdiff - decode.c
valgrind: Clear more unfreed memory issues
[sigrok-cli.git] / decode.c
index 6b3490a1d4ce1b0b206e8dc0a073fbc9d7ab4ba4..adbe73b32e90a80209f7a3f31a1248a23d971f9b 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -194,6 +194,10 @@ static int register_pd(char *opt_pds, char *opt_pd_annotations)
                                g_hash_table_remove(pd_ann_visible, di_prior->inst_id);
                }
                di_prior = di;
+               g_free(pd_name);
+               g_hash_table_destroy(pd_opthash);
+               g_hash_table_destroy(options);
+               pd_opthash = options = NULL;
        }
 
        if (pd_opthash)
@@ -204,7 +208,6 @@ static int register_pd(char *opt_pds, char *opt_pd_annotations)
                g_hash_table_destroy(channels);
 
        g_strfreev(pdtokens);
-       g_free(pd_name);
 
        return ret;
 }
@@ -272,6 +275,7 @@ static void map_pd_inst_channels(void *key, void *value, void *user_data)
        }
 
        srd_inst_channel_set_all(di, channel_indices);
+       g_hash_table_destroy(channel_indices);
 }
 
 void map_pd_channels(struct sr_dev_inst *sdi)
@@ -446,12 +450,12 @@ void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data)
 
        if (opt_loglevel <= SR_LOG_WARN) {
                /* Show only the longest annotation. */
-               printf("%s", pda->ann_text[0]);
+               printf("%s: %s", pdata->pdo->proto_id, pda->ann_text[0]);
        } else if (opt_loglevel >= SR_LOG_INFO) {
                /* Sample numbers and quotes around the longest annotation. */
                printf("%"PRIu64"-%"PRIu64"", pdata->start_sample, pdata->end_sample);
                if (opt_loglevel == SR_LOG_INFO) {
-                       printf(" \"%s\"", pda->ann_text[0]);
+                       printf(" %s \"%s\"", pdata->pdo->proto_id, pda->ann_text[0]);
                } else {
                        /* Protocol decoder id, annotation class,
                         * all annotation strings. */