From 0aee4ac02097248780a4185b3e38fbf856fe3447 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Fri, 18 Nov 2016 15:41:07 +0200 Subject: [PATCH] Differentiate active and inactive servers in services The code that checked whether a server was added to a service did not check whether the server reference was active. This caused problems when an old server was added again to a service that once had used it. --- server/core/service.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/core/service.c b/server/core/service.c index 9797bdaf8..9380d7c44 100644 --- a/server/core/service.c +++ b/server/core/service.c @@ -832,7 +832,7 @@ void serviceRemoveBackend(SERVICE *service, const SERVER *server) for (SERVER_REF *ref = service->dbref; ref; ref = ref->next) { - if (ref->server == server) + if (ref->server == server && ref->active) { ref->active = false; service->n_dbref--; @@ -856,8 +856,12 @@ serviceHasBackend(SERVICE *service, SERVER *server) spinlock_acquire(&service->spin); ptr = service->dbref; - while (ptr && ptr->server != server) + while (ptr) { + if (ptr->server == server && ptr->active) + { + break; + } ptr = ptr->next; } spinlock_release(&service->spin);