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.
This commit is contained in:
Markus Makela 2016-11-18 15:41:07 +02:00
parent a018e732eb
commit 0aee4ac020

View File

@ -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);