From d4160380a26ecae1449ac6af3ac54ff6673b1327 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 22 Apr 2015 17:26:36 +0200 Subject: [PATCH] iptv: rewrite iptv_input_is_free() - use per IPTV network limits, fixes #2780 --- src/input/mpegts/iptv/iptv.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index b92629e8..1149d585 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -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;