Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
iptv: don't pass fatal error when limiting is active, fixes #4009
  • Loading branch information
perexg committed Oct 4, 2016
1 parent 793b139 commit 91d28cc
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
2 changes: 1 addition & 1 deletion src/input/mpegts/iptv/iptv.c
Expand Up @@ -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
Expand Down
14 changes: 11 additions & 3 deletions src/input/mpegts/mpegts_service.c
Expand Up @@ -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;
Expand All @@ -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) {
Expand All @@ -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);
}

/*
Expand Down
19 changes: 11 additions & 8 deletions src/service.c
Expand Up @@ -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;
}
}
Expand All @@ -776,28 +776,31 @@ 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);
if(si->si_mark)
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;
Expand Down

0 comments on commit 91d28cc

Please sign in to comment.