From dc64726ac5b0bae00893385ab3b7f75b8aad217b Mon Sep 17 00:00:00 2001 From: phk Date: Tue, 3 Jul 2007 20:59:27 +0000 Subject: [PATCH] Move bereq backwards into cache_center.c for Fetch cases (Pass, Miss) git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1634 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache.h | 1 + varnish-cache/bin/varnishd/cache_center.c | 26 ++++++++++++++++++++++- varnish-cache/bin/varnishd/cache_fetch.c | 20 +++-------------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index d299e85f..221ad70f 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -318,6 +318,7 @@ struct sess { TAILQ_ENTRY(sess) list; struct backend *backend; + struct bereq *bereq; struct object *obj; struct VCL_conf *vcl; diff --git a/varnish-cache/bin/varnishd/cache_center.c b/varnish-cache/bin/varnishd/cache_center.c index 0f92fd8a..c5912e55 100644 --- a/varnish-cache/bin/varnishd/cache_center.c +++ b/varnish-cache/bin/varnishd/cache_center.c @@ -278,8 +278,32 @@ DOT errfetch [label="ERROR",shape=plaintext] static int cnt_fetch(struct sess *sp) { + struct bereq *bereq; + struct http *hp; + char *b; + int i; + + bereq = vbe_new_bereq(); + AN(bereq); + hp = bereq->http; + hp->logtag = HTTP_Tx; + + http_GetReq(sp->wrk, sp->fd, hp, sp->http); + http_FilterHeader(sp->wrk, sp->fd, hp, sp->http, HTTPH_R_FETCH); + http_PrintfHeader(sp->wrk, sp->fd, hp, "X-Varnish: %u", sp->xid); + http_PrintfHeader(sp->wrk, sp->fd, hp, + "X-Forwarded-for: %s", sp->addr); + if (!http_GetHdr(hp, H_Host, &b)) { + http_PrintfHeader(sp->wrk, sp->fd, hp, "Host: %s", + sp->backend->hostname); + } + sp->bereq = bereq; + + i = Fetch(sp); + vbe_free_bereq(sp->bereq); + sp->bereq = NULL; - if (Fetch(sp)) { + if (i) { SYN_ErrorPage(sp, 503, "Error talking to backend", 30); } else { RFC2616_cache_policy(sp, &sp->obj->http); /* XXX -> VCL */ diff --git a/varnish-cache/bin/varnishd/cache_fetch.c b/varnish-cache/bin/varnishd/cache_fetch.c index d4dd3f4d..12445d56 100644 --- a/varnish-cache/bin/varnishd/cache_fetch.c +++ b/varnish-cache/bin/varnishd/cache_fetch.c @@ -270,32 +270,19 @@ Fetch(struct sess *sp) CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); assert(sp->obj->busy != 0); w = sp->wrk; + bereq = sp->bereq; + hp = bereq->http; sp->obj->xid = sp->xid; vc = VBE_GetFd(sp); if (vc == NULL) return (1); - - bereq = vbe_new_bereq(); - AN(bereq); - hp = bereq->http; - hp->logtag = HTTP_Tx; - - http_GetReq(w, vc->fd, hp, sp->http); - http_FilterHeader(w, vc->fd, hp, sp->http, HTTPH_R_FETCH); - http_PrintfHeader(w, vc->fd, hp, "X-Varnish: %u", sp->xid); - http_PrintfHeader(w, vc->fd, hp, - "X-Forwarded-for: %s", sp->addr); - if (!http_GetHdr(hp, H_Host, &b)) { - http_PrintfHeader(w, vc->fd, hp, "Host: %s", - sp->backend->hostname); - } - WRK_Reset(w, &vc->fd); http_Write(w, hp, 0); if (WRK_Flush(w)) { /* XXX: cleanup */ + return (1); } @@ -377,7 +364,6 @@ Fetch(struct sess *sp) VBE_ClosedFd(sp->wrk, vc, 0); else VBE_RecycleFd(sp->wrk, vc); - vbe_free_bereq(bereq); return (0); } -- 2.39.5