]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
service: fix the video type filtering, fixes #4303
authorJaroslav Kysela <perex@perex.cz>
Fri, 7 Apr 2017 06:52:04 +0000 (08:52 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 7 Apr 2017 06:52:04 +0000 (08:52 +0200)
src/service.c

index 37754c2f1287360194b350dc86ae714b1183567f..e126c9be187286d64b9e5298e84f3340de936351 100644 (file)
@@ -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);
   }