From 10f7cb6f5ce084b8a8e72ecaf37718343fd0947b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Wed, 7 Nov 2012 09:28:18 +0100 Subject: [PATCH] [memleak] Plug memory leak in service destruction (cherry picked from commit 9338b9529e2ee4b69640887c5998d6ee2cca8601) --- src/service.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/service.c b/src/service.c index 4c3e8fdc..371dd9a1 100644 --- a/src/service.c +++ b/src/service.c @@ -110,18 +110,21 @@ stream_clean(elementary_stream_t *st) st->es_global_data_len = 0; } - /** * */ void -service_stream_destroy(service_t *t, elementary_stream_t *st) +service_stream_destroy(service_t *t, elementary_stream_t *es) { if(t->s_status == SERVICE_RUNNING) - stream_clean(st); - TAILQ_REMOVE(&t->s_components, st, es_link); - free(st->es_nicename); - free(st); + stream_clean(es); + + avgstat_flush(&es->es_rate); + avgstat_flush(&es->es_cc_errors); + + TAILQ_REMOVE(&t->s_components, es, es_link); + free(es->es_nicename); + free(es); } /** @@ -487,17 +490,17 @@ service_destroy(service_t *t) free(t->s_provider); free(t->s_dvb_charset); - while((st = TAILQ_FIRST(&t->s_components)) != NULL) { - TAILQ_REMOVE(&t->s_components, st, es_link); - free(st->es_nicename); - free(st); - } + while((st = TAILQ_FIRST(&t->s_components)) != NULL) + service_stream_destroy(t, st); free(t->s_pat_section); free(t->s_pmt_section); sbuf_free(&t->s_tsbuf); + avgstat_flush(&t->s_cc_errors); + avgstat_flush(&t->s_rate); + service_unref(t); if(ch != NULL) {