From 91d28cc52176944f0d7c7a1106c2119f3dc3ef5b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 4 Oct 2016 11:39:28 +0200 Subject: [PATCH] iptv: don't pass fatal error when limiting is active, fixes #4009 --- src/input/mpegts/iptv/iptv.c | 2 +- src/input/mpegts/mpegts_service.c | 14 +++++++++++--- src/service.c | 19 +++++++++++-------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index d59f09aa0..ff361882c 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -194,7 +194,7 @@ iptv_input_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm, int flags, int weight ) { if (!mpegts_input_is_enabled(mi, mm, flags, weight)) return 0; - return iptv_input_is_free(mi, mm, 0, weight, NULL) == NULL; + return iptv_input_is_free(mi, mm, 0, weight, NULL) == NULL ? 1 : -1; } static int diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index d03198e52..7bc7e5b75 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -288,7 +288,7 @@ mpegts_service_enlist_raw ( service_t *t, tvh_input_t *ti, struct service_instance_list *sil, int flags, int weight ) { - int p = 0, w; + int p, w, r, added = 0, errcnt = 0; mpegts_service_t *s = (mpegts_service_t*)t; mpegts_input_t *mi; mpegts_mux_t *m = s->s_dvb_mux; @@ -309,7 +309,14 @@ mpegts_service_enlist_raw if (ti && (tvh_input_t *)mi != ti) continue; - if (!mi->mi_is_enabled(mi, mmi->mmi_mux, flags, weight)) continue; + r = mi->mi_is_enabled(mi, mmi->mmi_mux, flags, weight); + if (!r) + continue; + if (r < 0) { + /* temporary error - retry later */ + errcnt++; + continue; + } /* Set weight to -1 (forced) for already active mux */ if (mmi->mmi_mux->mm_active == mmi) { @@ -324,9 +331,10 @@ mpegts_service_enlist_raw } service_instance_add(sil, t, mi->mi_instance, mi->mi_name, p, w); + added++; } - return 0; + return added ? 0 : (errcnt ? SM_CODE_NO_FREE_ADAPTER : 0); } /* diff --git a/src/service.c b/src/service.c index 519b2cb45..d29846777 100644 --- a/src/service.c +++ b/src/service.c @@ -764,7 +764,7 @@ service_find_instance r1 = s->s_enlist(s, ti, sil, flags, weight); if (r1 == 0) enlisted++; - else if (enlisted == 0) + else if (r == 0) r = r1; } } @@ -776,21 +776,17 @@ service_find_instance r1 = s->s_enlist(s, ti, sil, flags, weight); if (r1 == 0) enlisted++; - else if (enlisted == 0) + else if (r == 0) r = r1; } } } + if (enlisted) + r = 0; } else { r = s->s_enlist(s, ti, sil, flags, weight); } - if (r) { - if (*error < r) - *error = r; - return NULL; - } - /* Clean */ for(si = TAILQ_FIRST(sil); si != NULL; si = next) { next = TAILQ_NEXT(si, si_link); @@ -798,6 +794,13 @@ service_find_instance service_instance_destroy(sil, si); } + /* Error handling */ + if (r) { + if (*error < r) + *error = r; + return NULL; + } + if (TAILQ_EMPTY(sil)) { if (*error < SM_CODE_NO_ADAPTERS) *error = SM_CODE_NO_ADAPTERS; -- 2.47.3