From c7224164a073461d9be8dc54120dc13673e65f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Br=C3=BCns?= Date: Fri, 27 Nov 2015 00:44:50 +0100 Subject: [PATCH] output/wav: track and free memory for float conversion buffer --- src/output/wav.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/output/wav.c b/src/output/wav.c index 14ef36df..87ac44ac 100644 --- a/src/output/wav.c +++ b/src/output/wav.c @@ -36,6 +36,7 @@ struct out_context { int chanbuf_size; int *chanbuf_used; uint8_t **chanbuf; + float *fdata; }; static int realloc_chanbufs(const struct sr_output *o, int size) @@ -281,7 +282,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p num_samples = analog->num_samples; channels = analog->meaning->channels; num_channels = g_slist_length(analog->meaning->channels); - data = g_malloc(sizeof(float) * num_samples * num_channels); + if (!(data = g_try_realloc(outc->fdata, sizeof(float) * num_samples * num_channels))) + return SR_ERR_MALLOC; + outc->fdata = data; ret = sr_analog_to_float(analog, data); if (ret != SR_OK) return ret; @@ -363,6 +366,7 @@ static int cleanup(struct sr_output *o) g_free(outc->chanbuf[i]); g_free(outc->chanbuf_used); g_free(outc->chanbuf); + g_free(outc->fdata); g_free(outc); o->priv = NULL;