From: Jaroslav Kysela Date: Fri, 7 Apr 2017 06:52:04 +0000 (+0200) Subject: service: fix the video type filtering, fixes #4303 X-Git-Tag: v4.2.1~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d763ef9258e78bd17aa87ce889ae57e0f1ed3096;p=thirdparty%2Ftvheadend.git service: fix the video type filtering, fixes #4303 --- diff --git a/src/service.c b/src/service.c index 37754c2f1..e126c9be1 100644 --- a/src/service.c +++ b/src/service.c @@ -739,7 +739,7 @@ service_find_instance idnode_list_mapping_t *ilm; service_instance_t *si, *next; profile_t *pro = prch ? prch->prch_pro : NULL; - int enlisted, r, r1; + int r, r1; lock_assert(&global_lock); @@ -759,7 +759,6 @@ service_find_instance *error = SM_CODE_SVC_NOT_ENABLED; return NULL; } - enlisted = 0; LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) { s = (service_t *)ilm->ilm_in1; if (s->s_is_enabled(s, flags)) { @@ -769,27 +768,29 @@ service_find_instance (pro->pro_svfilter == PROFILE_SVF_HD && service_is_hdtv(s)) || (pro->pro_svfilter == PROFILE_SVF_UHD && service_is_uhdtv(s))) { r1 = s->s_enlist(s, ti, sil, flags, weight); - if (r1 == 0) - enlisted++; - else if (r == 0) + if (r1 && r == 0) r = r1; } } } - if (enlisted == 0) { + /* find a valid instance */ + TAILQ_FOREACH(si, sil, si_link) + if (!si->si_error) break; + if (si == NULL) { LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) { s = (service_t *)ilm->ilm_in1; if (s->s_is_enabled(s, flags)) { r1 = s->s_enlist(s, ti, sil, flags, weight); - if (r1 == 0) - enlisted++; - else if (r == 0) + if (r1 && r == 0) r = r1; } } } - if (enlisted) - r = 0; + TAILQ_FOREACH(si, sil, si_link) + if (!si->si_error) { + r = 0; + break; + } } else { r = s->s_enlist(s, ti, sil, flags, weight); }