Support backend reference counting

parent bd18be27
...@@ -96,13 +96,18 @@ vmod_director__init(VRT_CTX, ...@@ -96,13 +96,18 @@ vmod_director__init(VRT_CTX,
} }
VCL_VOID VCL_VOID
vmod_director__fini(struct vmod_all_healthy_director **dp) { vmod_director__fini(struct vmod_all_healthy_director **dp)
{
struct vmod_all_healthy_director *d = *dp; struct vmod_all_healthy_director *d = *dp;
int i;
*dp = NULL; *dp = NULL;
if (d == NULL) if (d == NULL)
return; return;
CHECK_OBJ(d, VMOD_ALL_HEALTHY_DIRECTOR_MAGIC); CHECK_OBJ(d, VMOD_ALL_HEALTHY_DIRECTOR_MAGIC);
for (i = 0; i < d->nconsider; i++)
VRT_Assign_Backend(&d->consider[i], NULL);
VRT_Assign_Backend(&d->backend, NULL);
VRT_DelDirector(&d->dir); VRT_DelDirector(&d->dir);
free(TRUST_ME(d->consider)); free(TRUST_ME(d->consider));
FREE_OBJ(d); FREE_OBJ(d);
...@@ -145,9 +150,9 @@ vmod_director_consider(VRT_CTX, ...@@ -145,9 +150,9 @@ vmod_director_consider(VRT_CTX,
d->spcconsider = i; d->spcconsider = i;
d->consider = n; d->consider = n;
} }
d->consider[d->nconsider++] = b; VRT_Assign_Backend(&d->consider[d->nconsider++], b);
if (d->backend == NULL) if (d->backend == NULL)
d->backend = b; VRT_Assign_Backend(&d->backend, b);
} }
VCL_VOID VCL_VOID
...@@ -163,7 +168,7 @@ vmod_director_set_backend(VRT_CTX, ...@@ -163,7 +168,7 @@ vmod_director_set_backend(VRT_CTX,
return; return;
} }
d->backend = b; VRT_Assign_Backend(&d->backend, b);
} }
VCL_BACKEND VCL_BACKEND
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment