From: Jaroslav Kysela Date: Fri, 23 Mar 2018 14:10:49 +0000 (+0100) Subject: parser: fix the NULL set_service X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7b328d75adb1bfcf4a3fafa5ad0c1745ff24ca95;p=thirdparty%2Ftvheadend.git parser: fix the NULL set_service --- diff --git a/src/esstream.c b/src/esstream.c index c8d94e824..5a6074129 100644 --- a/src/esstream.c +++ b/src/esstream.c @@ -62,7 +62,7 @@ void elementary_set_init /** * */ -void elementary_set_clean(elementary_set_t *set) +void elementary_set_clean(elementary_set_t *set, service_t *t) { elementary_stream_t *st; @@ -71,7 +71,7 @@ void elementary_set_clean(elementary_set_t *set) elementary_set_stream_destroy(set, st); free(set->set_nicename); set->set_nicename = NULL; - set->set_service = 0; + set->set_service = t; } /** diff --git a/src/esstream.h b/src/esstream.h index cb9c70fa3..a2872d6c4 100644 --- a/src/esstream.h +++ b/src/esstream.h @@ -161,7 +161,7 @@ struct elementary_set { */ void elementary_set_init (elementary_set_t *set, int subsys, const char *nicename, service_t *t); -void elementary_set_clean(elementary_set_t *set); +void elementary_set_clean(elementary_set_t *set, service_t *t); void elementary_set_update_nicename(elementary_set_t *set, const char *nicename); void elementary_set_clean_streams(elementary_set_t *set); void elementary_set_stream_destroy(elementary_set_t *set, elementary_stream_t *es); diff --git a/src/parsers/message.c b/src/parsers/message.c index 63a04f4ed..812392ad7 100644 --- a/src/parsers/message.c +++ b/src/parsers/message.c @@ -290,23 +290,24 @@ static void parser_clean_es(parser_es_t *pes) static void parser_input_start(parser_t *prs, streaming_message_t *sm) { streaming_start_t *ss = sm->sm_data; + elementary_set_t *set = &prs->prs_components; elementary_stream_t *es; - TAILQ_FOREACH(es, &prs->prs_components.set_all, es_link) + TAILQ_FOREACH(es, &set->set_all, es_link) parser_clean_es((parser_es_t *)es); - elementary_set_clean(&prs->prs_components); + elementary_set_clean(set, prs->prs_service); - elementary_stream_create_from_start(&prs->prs_components, ss, sizeof(parser_es_t)); - TAILQ_FOREACH(es, &prs->prs_components.set_all, es_link) { + elementary_stream_create_from_start(set, ss, sizeof(parser_es_t)); + TAILQ_FOREACH(es, &set->set_all, es_link) { parser_init_es((parser_es_t *)es, prs); - TAILQ_INSERT_TAIL(&prs->prs_components.set_filter, es, es_filter_link); + TAILQ_INSERT_TAIL(&set->set_filter, es, es_filter_link); } prs->prs_current_pcr = PTS_UNSET; prs->prs_candidate_pcr = PTS_UNSET; prs->prs_current_pcr_guess = 0; prs->prs_pcr_boundary = 90000; - if (elementary_stream_has_no_audio(&prs->prs_service->s_components, 1)) + if (elementary_stream_has_no_audio(set, 1)) prs->prs_pcr_boundary = 6*90000; streaming_target_deliver2(prs->prs_output, sm); @@ -391,6 +392,6 @@ parser_destroy(streaming_target_t *pad) if (pes->es_psi.mt_name) dvb_table_parse_done(&pes->es_psi); } - elementary_set_clean(&prs->prs_components); + elementary_set_clean(&prs->prs_components, NULL); free(prs); } diff --git a/src/service.c b/src/service.c index 19c6fe998..689409118 100644 --- a/src/service.c +++ b/src/service.c @@ -608,7 +608,7 @@ service_destroy(service_t *t, int delconf) t->s_status = SERVICE_ZOMBIE; - elementary_set_clean(&t->s_components); + elementary_set_clean(&t->s_components, NULL); if (t->s_hbbtv) { htsmsg_destroy(t->s_hbbtv);