From 521c49e14b84f0093904b4529f0e61b64aea2876 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 26 May 2014 13:09:23 +0200 Subject: [PATCH] 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 --- src/service.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/service.c b/src/service.c index c797041d..72558f59 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; + /* 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_REVERSE(si, sil, service_instance_list, si_link) + TAILQ_FOREACH(si, sil, si_link) if (weight > si->si_weight && si->si_error == 0) break; }