From: Jaroslav Kysela Date: Mon, 26 May 2014 11:09:23 +0000 (+0200) Subject: service: handle input priority better X-Git-Tag: v4.1~1953 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=521c49e14b84f0093904b4529f0e61b64aea2876;p=thirdparty%2Ftvheadend.git service: handle input priority better Ensure, that inputs with higher priorities are preferred. The decision line is: 1) re-use input if the in-use mux matches 2) use a free input with highest priority 3) cancel the mux/input with smallest weight and use it for new --- diff --git a/src/service.c b/src/service.c index c797041d9..72558f599 100644 --- a/src/service.c +++ b/src/service.c @@ -567,14 +567,21 @@ service_find_instance return si; } - /* Forced or Idle */ + /* Forced */ TAILQ_FOREACH(si, sil, si_link) - if(si->si_weight <= 0 && si->si_error == 0) + if(si->si_weight < 0 && si->si_error == 0) break; - /* Bump someone */ + /* Idle */ if (!si) { TAILQ_FOREACH_REVERSE(si, sil, service_instance_list, si_link) + if (si->si_weight == 0 && si->si_error == 0) + break; + } + + /* Bump someone */ + if (!si) { + TAILQ_FOREACH(si, sil, si_link) if (weight > si->si_weight && si->si_error == 0) break; }