Commit c5710755 authored by Nils Goroll's avatar Nils Goroll

fix remove_backend

parent 946bc54d
Pipeline #306 skipped
...@@ -335,20 +335,29 @@ vmod_random_add_backend(VRT_CTX, struct vmod_weightadjust_random *rr, ...@@ -335,20 +335,29 @@ vmod_random_add_backend(VRT_CTX, struct vmod_weightadjust_random *rr,
VCL_VOID __match_proto__() VCL_VOID __match_proto__()
vmod_random_remove_backend(VRT_CTX, vmod_random_remove_backend(VRT_CTX,
struct vmod_weightadjust_random *rr, VCL_BACKEND be) struct vmod_weightadjust_random *rr, VCL_BACKEND vcl_be)
{ {
struct vmod_wadj_vcl *wa_vcl; struct vmod_wadj_vcl *wa_vcl;
struct wadj_prop *prop; struct wadj_prop *prop;
struct wadj_prop_head props; struct wadj_prop_head props;
struct backend *be;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(rr, VMOD_WEIGHTADJUST_RANDOM_MAGIC); CHECK_OBJ_NOTNULL(rr, VMOD_WEIGHTADJUST_RANDOM_MAGIC);
wa_vcl = rr->extra.wa_vcl; wa_vcl = rr->extra.wa_vcl;
CHECK_OBJ_NOTNULL(wa_vcl, VMOD_WADJ_VCL_MAGIC); CHECK_OBJ_NOTNULL(wa_vcl, VMOD_WADJ_VCL_MAGIC);
if (vcl_be->priv == NULL) {
ERR(ctx, "can only be used with real backends "
"(no director layering)");
return;
}
CAST_OBJ_NOTNULL(be, vcl_be->priv, BACKEND_MAGIC);
vdir_wrlock(rr->vd); vdir_wrlock(rr->vd);
VTAILQ_FOREACH(prop, &rr->extra.props, list_vd) { VTAILQ_FOREACH(prop, &rr->extra.props, list_vd) {
if (prop->vd == rr->vd) if (prop->be == be)
break; break;
} }
if (prop == NULL) { if (prop == NULL) {
...@@ -358,7 +367,6 @@ vmod_random_remove_backend(VRT_CTX, ...@@ -358,7 +367,6 @@ vmod_random_remove_backend(VRT_CTX,
assert(prop->vd == rr->vd); assert(prop->vd == rr->vd);
VTAILQ_REMOVE(&rr->extra.props, prop, list_vd); VTAILQ_REMOVE(&rr->extra.props, prop, list_vd);
vdir_unlock(rr->vd);
VTAILQ_INIT(&props); VTAILQ_INIT(&props);
VTAILQ_INSERT_HEAD(&props, prop, list_vd); VTAILQ_INSERT_HEAD(&props, prop, list_vd);
...@@ -366,7 +374,8 @@ vmod_random_remove_backend(VRT_CTX, ...@@ -366,7 +374,8 @@ vmod_random_remove_backend(VRT_CTX,
AZ(pthread_mutex_lock(&wa_vcl->mtx)); AZ(pthread_mutex_lock(&wa_vcl->mtx));
wadj_dir_fini(&props, &wa_vcl->props); wadj_dir_fini(&props, &wa_vcl->props);
AZ(pthread_mutex_unlock(&wa_vcl->mtx)); AZ(pthread_mutex_unlock(&wa_vcl->mtx));
vdir_unlock(rr->vd);
no_weightadjust: no_weightadjust:
vdir_remove_backend(rr->vd, be, NULL); vdir_remove_backend(rr->vd, vcl_be, NULL);
} }
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