output: fix options memory leak

This commit is contained in:
Stefan Brüns 2015-11-26 04:29:28 +01:00 committed by Uwe Hermann
parent 2dbe445d55
commit da3d141f04
3 changed files with 49 additions and 45 deletions

View File

@ -355,22 +355,6 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
return SR_OK; return SR_OK;
} }
static int cleanup(struct sr_output *o)
{
struct context *ctx;
if (!o || !o->sdi)
return SR_ERR_ARG;
ctx = o->priv;
g_ptr_array_free(ctx->channellist, 1);
g_free(ctx->fdata);
g_free(ctx);
o->priv = NULL;
return SR_OK;
}
static struct sr_option options[] = { static struct sr_option options[] = {
{ "digits", "Digits", "Digits to show", NULL, NULL }, { "digits", "Digits", "Digits to show", NULL, NULL },
ALL_ZERO ALL_ZERO
@ -389,6 +373,24 @@ static const struct sr_option *get_options(void)
return options; return options;
} }
static int cleanup(struct sr_output *o)
{
struct context *ctx;
if (!o || !o->sdi)
return SR_ERR_ARG;
ctx = o->priv;
g_ptr_array_free(ctx->channellist, 1);
g_variant_unref(options[0].def);
g_slist_free_full(options[0].values, (GDestroyNotify)g_variant_unref);
g_free(ctx->fdata);
g_free(ctx);
o->priv = NULL;
return SR_OK;
}
SR_PRIV struct sr_output_module output_analog = { SR_PRIV struct sr_output_module output_analog = {
.id = "analog", .id = "analog",
.name = "Analog", .name = "Analog",

View File

@ -296,18 +296,6 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
return SR_OK; return SR_OK;
} }
static int cleanup(struct sr_output *o)
{
struct out_context *outc;
outc = o->priv;
g_free(outc->filename);
g_free(outc);
o->priv = NULL;
return SR_OK;
}
static struct sr_option options[] = { static struct sr_option options[] = {
ALL_ZERO ALL_ZERO
}; };
@ -320,6 +308,19 @@ static const struct sr_option *get_options(void)
return options; return options;
} }
static int cleanup(struct sr_output *o)
{
struct out_context *outc;
outc = o->priv;
g_variant_unref(options[0].def);
g_free(outc->filename);
g_free(outc);
o->priv = NULL;
return SR_OK;
}
SR_PRIV struct sr_output_module output_srzip = { SR_PRIV struct sr_output_module output_srzip = {
.id = "srzip", .id = "srzip",
.name = "srzip", .name = "srzip",

View File

@ -338,23 +338,6 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
return SR_OK; return SR_OK;
} }
static int cleanup(struct sr_output *o)
{
struct out_context *outc;
int i;
outc = o->priv;
g_slist_free(outc->channels);
for (i = 0; i < outc->num_channels; i++)
g_free(outc->chanbuf[i]);
g_free(outc->chanbuf_used);
g_free(outc->chanbuf);
g_free(outc);
o->priv = NULL;
return SR_OK;
}
static struct sr_option options[] = { static struct sr_option options[] = {
{ "scale", "Scale", "Scale values by factor", NULL, NULL }, { "scale", "Scale", "Scale values by factor", NULL, NULL },
ALL_ZERO ALL_ZERO
@ -368,6 +351,24 @@ static const struct sr_option *get_options(void)
return options; return options;
} }
static int cleanup(struct sr_output *o)
{
struct out_context *outc;
int i;
outc = o->priv;
g_slist_free(outc->channels);
g_variant_unref(options[0].def);
for (i = 0; i < outc->num_channels; i++)
g_free(outc->chanbuf[i]);
g_free(outc->chanbuf_used);
g_free(outc->chanbuf);
g_free(outc);
o->priv = NULL;
return SR_OK;
}
SR_PRIV struct sr_output_module output_wav = { SR_PRIV struct sr_output_module output_wav = {
.id = "wav", .id = "wav",
.name = "WAV", .name = "WAV",