]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts input: fix free weight handling (for example epggrab endless loop)
authorJaroslav Kysela <perex@perex.cz>
Tue, 8 Dec 2015 12:41:47 +0000 (13:41 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 8 Dec 2015 12:46:55 +0000 (13:46 +0100)
src/input/mpegts/mpegts_service.c
src/service.c
src/service.h

index 0d27b2c3acd0e6d295ca588c4b548bc1661cfa92..12acdc19cdb268fbd063971be03445036d426a62 100644 (file)
@@ -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;
     }
 
index 0bda93398f4f4deafd2a4a6459bed4cb7d5ab0e5..fbaa8b66c003bc8a6cf5877e2c5d6f31e628d6d9 100644 (file)
@@ -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 */
index 3c7449a072df73d772e9daac3167097d27a620a0..64312fc969adf623e2d457edf486e29b1076ff42 100644 (file)
@@ -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);