[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