From: Stefan BrĂ¼ns Date: Thu, 26 Nov 2015 23:44:50 +0000 (+0100) Subject: output/wav: track and free memory for float conversion buffer X-Git-Tag: libsigrok-0.4.0~90 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=c7224164a073461d9be8dc54120dc13673e65f61;p=libsigrok.git output/wav: track and free memory for float conversion buffer --- 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;