[master] 919a9016b Noop-Polish VRT_Assign_Backend()
Nils Goroll
nils.goroll at uplex.de
Mon Mar 6 15:19:06 UTC 2023
commit 919a9016b4c0f71cc92ad1bdf3f21062f7285891
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Mon Feb 27 21:17:36 2023 +0100
Noop-Polish VRT_Assign_Backend()
Use a local vdir variable for clarity like elsewhere in the code.
Use the lock in vdir, not the pointer to it in VCL_BACKEND for
consistency with VRT_DelDirector() a few lines above.
diff --git a/bin/varnishd/cache/cache_vrt_vcl.c b/bin/varnishd/cache/cache_vrt_vcl.c
index 2ba29b0a0..93b3064c2 100644
--- a/bin/varnishd/cache/cache_vrt_vcl.c
+++ b/bin/varnishd/cache/cache_vrt_vcl.c
@@ -284,29 +284,32 @@ VRT_DelDirector(VCL_BACKEND *bp)
void
VRT_Assign_Backend(VCL_BACKEND *dst, VCL_BACKEND src)
{
+ struct vcldir *vdir;
int busy;
AN(dst);
CHECK_OBJ_ORNULL((*dst), DIRECTOR_MAGIC);
CHECK_OBJ_ORNULL(src, DIRECTOR_MAGIC);
if (*dst != NULL) {
- CHECK_OBJ_NOTNULL((*dst)->vdir, VCLDIR_MAGIC);
- if (!((*dst)->vdir->flags & VDIR_FLG_NOREFCNT)) {
- Lck_Lock((*dst)->mtx);
- assert((*dst)->vdir->refcnt > 0);
- busy = --(*dst)->vdir->refcnt;
- Lck_Unlock((*dst)->mtx);
+ vdir = (*dst)->vdir;
+ CHECK_OBJ_NOTNULL(vdir, VCLDIR_MAGIC);
+ if (!(vdir->flags & VDIR_FLG_NOREFCNT)) {
+ Lck_Lock(&vdir->dlck);
+ assert(vdir->refcnt > 0);
+ busy = --vdir->refcnt;
+ Lck_Unlock(&vdir->dlck);
if (!busy)
retire_backend(dst);
}
}
if (src != NULL) {
- CHECK_OBJ_NOTNULL(src->vdir, VCLDIR_MAGIC);
- if (!(src->vdir->flags & VDIR_FLG_NOREFCNT)) {
- Lck_Lock(src->mtx);
- assert(src->vdir->refcnt > 0);
- src->vdir->refcnt++;
- Lck_Unlock(src->mtx);
+ vdir = src->vdir;
+ CHECK_OBJ_NOTNULL(vdir, VCLDIR_MAGIC);
+ if (!(vdir->flags & VDIR_FLG_NOREFCNT)) {
+ Lck_Lock(&vdir->dlck);
+ assert(vdir->refcnt > 0);
+ vdir->refcnt++;
+ Lck_Unlock(&vdir->dlck);
}
}
*dst = src;
More information about the varnish-commit
mailing list