[master] 3299b79 Ask the director for the suckaddr, rather than groping around inside it's privates for it.

Poul-Henning Kamp phk at FreeBSD.org
Wed Oct 1 09:23:27 CEST 2014


commit 3299b7935c4ebfcd41ba92db9a11c7639f885258
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Oct 1 07:23:07 2014 +0000

    Ask the director for the suckaddr, rather than groping around inside
    it's privates for it.

diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index 845da6a..2fbb223 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -513,6 +513,18 @@ vdi_simple_finish(const struct director *d, struct worker *wrk,
 	}
 }
 
+static struct suckaddr * __match_proto__(vdi_suckaddr_f)
+vdi_simple_suckaddr(const struct director *d, struct worker *wrk,
+    struct busyobj *bo)
+{
+	CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
+
+	if (bo->vbc != NULL)
+		return(bo->vbc->addr);
+	return (NULL);
+}
 
 /*--------------------------------------------------------------------*/
 
@@ -555,6 +567,7 @@ VRT_init_dir(VRT_CTX, struct director **bp, int idx,
 	vs->dir.gethdrs = vdi_simple_gethdrs;
 	vs->dir.getbody = vdi_simple_getbody;
 	vs->dir.finish = vdi_simple_finish;
+	vs->dir.suckaddr = vdi_simple_suckaddr;
 
 	vs->vrt = t;
 
diff --git a/bin/varnishd/cache/cache_backend.h b/bin/varnishd/cache/cache_backend.h
index 5c18107..fefb7bd 100644
--- a/bin/varnishd/cache/cache_backend.h
+++ b/bin/varnishd/cache/cache_backend.h
@@ -63,6 +63,8 @@ typedef int vdi_getbody_f(const struct director *, struct worker *,
     struct busyobj *);
 typedef void vdi_finish_f(const struct director *, struct worker *,
     struct busyobj *);
+typedef struct suckaddr *vdi_suckaddr_f(const struct director *,
+    struct worker *, struct busyobj *);
 
 struct director {
 	unsigned		magic;
@@ -75,6 +77,7 @@ struct director {
 	vdi_gethdrs_f		*gethdrs;
 	vdi_getbody_f		*getbody;
 	vdi_finish_f		*finish;
+	vdi_suckaddr_f		*suckaddr;
 	void			*priv;
 };
 
@@ -168,6 +171,8 @@ void VDI_Finish(const struct director *d, struct worker *wrk,
 struct vbc *VDI_GetFd(const struct director *d, struct worker *wrk,
     struct busyobj *);
 int VDI_Healthy(const struct director *);
+struct suckaddr *VDI_Suckaddr(const struct director *d, struct worker *wrk,
+    struct busyobj *bo);
 void VDI_AddHostHeader(struct http *to, const struct vbc *vbc);
 void VBE_Poll(void);
 void VDI_Init(void);
diff --git a/bin/varnishd/cache/cache_dir.c b/bin/varnishd/cache/cache_dir.c
index 9f7ae43..c58d5a9 100644
--- a/bin/varnishd/cache/cache_dir.c
+++ b/bin/varnishd/cache/cache_dir.c
@@ -155,3 +155,16 @@ VDI_Healthy(const struct director *d)
 	AN(d->healthy);
 	return (d->healthy(d, NULL));
 }
+
+/* Get suckaddr ------------------------------------------------------*/
+
+struct suckaddr *
+VDI_Suckaddr(const struct director *d, struct worker *wrk, struct busyobj *bo)
+{
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
+	CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
+
+	AN(d->suckaddr);
+	return (d->suckaddr(d, wrk, bo));
+}
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index ff49d3a..489a074 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -324,11 +324,7 @@ VRT_r_beresp_backend_ip(VRT_CTX)
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
-	if (ctx->bo->vbc != NULL) {
-		CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
-		return(ctx->bo->vbc->addr);
-	} else
-		return (NULL);
+	return (VDI_Suckaddr(ctx->bo->director_resp, ctx->bo->wrk, ctx->bo));
 }
 
 /*--------------------------------------------------------------------*/



More information about the varnish-commit mailing list