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:
@ -832,7 +832,7 @@ void serviceRemoveBackend(SERVICE *service, const SERVER *server)
|
|||||||
|
|
||||||
for (SERVER_REF *ref = service->dbref; ref; ref = ref->next)
|
for (SERVER_REF *ref = service->dbref; ref; ref = ref->next)
|
||||||
{
|
{
|
||||||
if (ref->server == server)
|
if (ref->server == server && ref->active)
|
||||||
{
|
{
|
||||||
ref->active = false;
|
ref->active = false;
|
||||||
service->n_dbref--;
|
service->n_dbref--;
|
||||||
@ -856,8 +856,12 @@ serviceHasBackend(SERVICE *service, SERVER *server)
|
|||||||
|
|
||||||
spinlock_acquire(&service->spin);
|
spinlock_acquire(&service->spin);
|
||||||
ptr = service->dbref;
|
ptr = service->dbref;
|
||||||
while (ptr && ptr->server != server)
|
while (ptr)
|
||||||
{
|
{
|
||||||
|
if (ptr->server == server && ptr->active)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
spinlock_release(&service->spin);
|
spinlock_release(&service->spin);
|
||||||
|
Reference in New Issue
Block a user