From: Jaroslav Kysela Date: Tue, 8 Dec 2015 12:41:47 +0000 (+0100) Subject: mpegts input: fix free weight handling (for example epggrab endless loop) X-Git-Tag: v4.2.1~1343 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5b5f241f28b2c74903cd83f23de85004f9025933;p=thirdparty%2Ftvheadend.git mpegts input: fix free weight handling (for example epggrab endless loop) --- diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index 0d27b2c3a..12acdc19c 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -289,8 +289,9 @@ mpegts_service_config_save ( service_t *t ) * Service instance list */ static void -mpegts_service_enlist(service_t *t, tvh_input_t *ti, - struct service_instance_list *sil, int flags) +mpegts_service_enlist + ( service_t *t, tvh_input_t *ti, struct service_instance_list *sil, + int flags, int weight ) { int p = 0, w; mpegts_service_t *s = (mpegts_service_t*)t; @@ -322,7 +323,8 @@ mpegts_service_enlist(service_t *t, tvh_input_t *ti, } else { w = mi->mi_get_weight(mi, mmi->mmi_mux, flags); p = mi->mi_get_priority(mi, mmi->mmi_mux, flags); - if (w > 0 && mi->mi_free_weight && w < mi->mi_free_weight) + if (w > 0 && mi->mi_free_weight && + weight >= mi->mi_free_weight && w < mi->mi_free_weight) w = 0; } diff --git a/src/service.c b/src/service.c index 0bda93398..fbaa8b66c 100644 --- a/src/service.c +++ b/src/service.c @@ -686,7 +686,7 @@ service_find_instance pro->pro_svfilter == PROFILE_SVF_NONE || (pro->pro_svfilter == PROFILE_SVF_SD && service_is_sdtv(s)) || (pro->pro_svfilter == PROFILE_SVF_HD && service_is_hdtv(s))) { - s->s_enlist(s, ti, sil, flags); + s->s_enlist(s, ti, sil, flags, weight); enlisted++; } } @@ -695,11 +695,11 @@ service_find_instance LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) { s = (service_t *)ilm->ilm_in1; if (s->s_is_enabled(s, flags)) - s->s_enlist(s, ti, sil, flags); + s->s_enlist(s, ti, sil, flags, weight); } } } else { - s->s_enlist(s, ti, sil, flags); + s->s_enlist(s, ti, sil, flags, weight); } /* Clean */ diff --git a/src/service.h b/src/service.h index 3c7449a07..64312fc96 100644 --- a/src/service.h +++ b/src/service.h @@ -294,7 +294,7 @@ typedef struct service { int (*s_is_enabled)(struct service *t, int flags); void (*s_enlist)(struct service *s, struct tvh_input *ti, - service_instance_list_t *sil, int flags); + service_instance_list_t *sil, int flags, int weight); int (*s_start_feed)(struct service *s, int instance, int weight, int flags);