Best regards
Marc

>From 9b117fbf9279074e3f10487eb0b28183df366a07 Mon Sep 17 00:00:00 2001
From: Marc Schink <d...@zapb.de>
Date: Wed, 30 Oct 2019 10:11:34 +0100
Subject: [PATCH] demo: Fix memory leak

How to reproduce:

 $ G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --leak-check=full sigrok-cli --scan --driver demo

Signed-off-by: Marc Schink <d...@zapb.de>
---
 src/hardware/demo/api.c      | 2 ++
 src/hardware/demo/protocol.c | 9 +++++++++
 src/hardware/demo/protocol.h | 1 +
 3 files changed, 12 insertions(+)

diff --git a/src/hardware/demo/api.c b/src/hardware/demo/api.c
index fcd40157..3b77d40c 100644
--- a/src/hardware/demo/api.c
+++ b/src/hardware/demo/api.c
@@ -225,6 +225,8 @@ static void clear_helper(struct dev_context *devc)
 	GHashTableIter iter;
 	void *value;
 
+	demo_free_analog_pattern(devc);
+
 	/* Analog generators. */
 	g_hash_table_iter_init(&iter, devc->ch_ag);
 	while (g_hash_table_iter_next(&iter, NULL, &value))
diff --git a/src/hardware/demo/protocol.c b/src/hardware/demo/protocol.c
index 305ff17c..a969d029 100644
--- a/src/hardware/demo/protocol.c
+++ b/src/hardware/demo/protocol.c
@@ -252,6 +252,15 @@ SR_PRIV void demo_generate_analog_pattern(struct dev_context *devc)
 	devc->analog_patterns[PATTERN_ANALOG_RANDOM] = pattern;
 }
 
+SR_PRIV void demo_free_analog_pattern(struct dev_context *devc)
+{
+	g_free(devc->analog_patterns[PATTERN_SQUARE]);
+	g_free(devc->analog_patterns[PATTERN_SINE]);
+	g_free(devc->analog_patterns[PATTERN_TRIANGLE]);
+	g_free(devc->analog_patterns[PATTERN_SAWTOOTH]);
+	g_free(devc->analog_patterns[PATTERN_ANALOG_RANDOM]);
+}
+
 static uint64_t encode_number_to_gray(uint64_t nr)
 {
 	return nr ^ (nr >> 1);
diff --git a/src/hardware/demo/protocol.h b/src/hardware/demo/protocol.h
index 4156f5ee..230d8f35 100644
--- a/src/hardware/demo/protocol.h
+++ b/src/hardware/demo/protocol.h
@@ -161,6 +161,7 @@ struct analog_gen {
 };
 
 SR_PRIV void demo_generate_analog_pattern(struct dev_context *devc);
+SR_PRIV void demo_free_analog_pattern(struct dev_context *devc);
 SR_PRIV int demo_prepare_data(int fd, int revents, void *cb_data);
 
 #endif
-- 
2.17.1

_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel

Reply via email to