]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
iptv: rewrite iptv_input_is_free() - use per IPTV network limits, fixes #2780
authorJaroslav Kysela <perex@perex.cz>
Wed, 22 Apr 2015 15:26:36 +0000 (17:26 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 22 Apr 2015 15:26:36 +0000 (17:26 +0200)
src/input/mpegts/iptv/iptv.c

index b92629e820f9dcadb5ecebc18190c284d64da6ab..1149d5854b7d5e7ac9b79e4b18e56c465fa207d9 100644 (file)
@@ -100,28 +100,23 @@ const idclass_t iptv_input_class = {
 };
 
 static int
-iptv_input_is_free ( mpegts_input_t *mi )
+iptv_input_is_free ( mpegts_input_t *mi, mpegts_mux_t *mm )
 {
   int c = 0;
   mpegts_mux_instance_t *mmi;
-  mpegts_network_link_t *mnl;
+  iptv_network_t *in = (iptv_network_t *)mm->mm_network;
   
   LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link)
-    c++;
+    if (mmi->mmi_mux->mm_network == (mpegts_network_t *)in)
+      c++;
   
   /* Limit reached */
-  LIST_FOREACH(mnl, &mi->mi_networks, mnl_mi_link) {
-    iptv_network_t *in = (iptv_network_t*)mnl->mnl_network;
-    if (in->in_max_streams && c >= in->in_max_streams)
-      return 0;
-  }
+  if (in->in_max_streams && c >= in->in_max_streams)
+    return 0;
   
   /* Bandwidth reached */
-  LIST_FOREACH(mnl, &mi->mi_networks, mnl_mi_link) {
-    iptv_network_t *in = (iptv_network_t*)mnl->mnl_network;
-    if (in->in_bw_limited)
+  if (in->in_bw_limited)
       return 0;
-  }
 
   return 1;
 }
@@ -134,7 +129,7 @@ iptv_input_get_weight ( mpegts_input_t *mi, mpegts_mux_t *mm, int flags )
   const service_t *s;
 
   /* Find the "min" weight */
-  if (!iptv_input_is_free(mi)) {
+  if (!iptv_input_is_free(mi, mm)) {
     w = 1000000;
 
     /* Service subs */
@@ -183,7 +178,7 @@ iptv_input_warm_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
     return 0;
 
   /* Do we need to stop something? */
-  if (!iptv_input_is_free(mi)) {
+  if (!iptv_input_is_free(mi, mmi->mmi_mux)) {
     pthread_mutex_lock(&mi->mi_output_lock);
     mpegts_mux_instance_t *m, *s = NULL;
     int w = 1000000;