[master] 9d3f1941a Localize req->req_bodybytes
Poul-Henning Kamp
phk at FreeBSD.org
Tue Jan 22 09:04:07 UTC 2019
commit 9d3f1941a5ebcec36b022c46d4a0b356913c305c
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Jan 22 09:03:47 2019 +0000
Localize req->req_bodybytes
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index ce68faf59..2018c9bce 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -486,7 +486,6 @@ struct req {
vtim_dur d_ttl;
vtim_dur d_grace;
- ssize_t req_bodybytes; /* Parsed req bodybytes */
const struct stevedore *storage;
const struct director *director_hint;
diff --git a/bin/varnishd/cache/cache_req.c b/bin/varnishd/cache/cache_req.c
index 630e47f07..c6abfe1ae 100644
--- a/bin/varnishd/cache/cache_req.c
+++ b/bin/varnishd/cache/cache_req.c
@@ -142,8 +142,6 @@ Req_New(const struct worker *wrk, struct sess *sp)
WS_Init(req->ws, "req", p, e - p);
- req->req_bodybytes = 0;
-
req->t_first = NAN;
req->t_prev = NAN;
req->t_req = NAN;
@@ -224,7 +222,6 @@ Req_Cleanup(struct sess *sp, struct worker *wrk, struct req *req)
req_AcctLogCharge(wrk->stats, req);
if (req->vsl->wid)
VSL_End(req->vsl);
- req->req_bodybytes = 0;
if (!isnan(req->t_prev) && req->t_prev > 0. && req->t_prev > sp->t_idle)
sp->t_idle = req->t_prev;
diff --git a/bin/varnishd/cache/cache_req_body.c b/bin/varnishd/cache/cache_req_body.c
index 488815d8a..903c973b5 100644
--- a/bin/varnishd/cache/cache_req_body.c
+++ b/bin/varnishd/cache/cache_req_body.c
@@ -56,6 +56,7 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
uint8_t *ptr;
enum vfp_status vfps = VFP_ERROR;
const struct stevedore *stv;
+ ssize_t req_bodybytes = 0;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
@@ -91,7 +92,6 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
return (-1);
}
- AZ(req->req_bodybytes);
AN(req->htc);
yet = req->htc->content_length;
if (yet != 0 && req->want100cont) {
@@ -102,7 +102,7 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
yet = 0;
do {
AZ(vfc->failed);
- if (maxsize >= 0 && req->req_bodybytes > maxsize) {
+ if (maxsize >= 0 && req_bodybytes > maxsize) {
(void)VFP_Error(vfc, "Request body too big to cache");
break;
}
@@ -114,7 +114,7 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
AN(l);
vfps = VFP_Suck(vfc, ptr, &l);
if (l > 0 && vfps != VFP_ERROR) {
- req->req_bodybytes += l;
+ req_bodybytes += l;
req->acct.req_bodybytes += l;
if (yet >= l)
yet -= l;
@@ -142,7 +142,7 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
}
ObjTrimStore(req->wrk, req->body_oc);
- AZ(ObjSetU64(req->wrk, req->body_oc, OA_LEN, req->req_bodybytes));
+ AZ(ObjSetU64(req->wrk, req->body_oc, OA_LEN, req_bodybytes));
HSH_DerefBoc(req->wrk, req->body_oc);
if (vfps != VFP_END) {
@@ -151,22 +151,22 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
return (-1);
}
- assert(req->req_bodybytes >= 0);
- if (req->req_bodybytes != req->htc->content_length) {
+ assert(req_bodybytes >= 0);
+ if (req_bodybytes != req->htc->content_length) {
/* We must update also the "pristine" req.* copy */
http_Unset(req->http0, H_Content_Length);
http_Unset(req->http0, H_Transfer_Encoding);
http_PrintfHeader(req->http0, "Content-Length: %ju",
- (uintmax_t)req->req_bodybytes);
+ (uintmax_t)req_bodybytes);
http_Unset(req->http, H_Content_Length);
http_Unset(req->http, H_Transfer_Encoding);
http_PrintfHeader(req->http, "Content-Length: %ju",
- (uintmax_t)req->req_bodybytes);
+ (uintmax_t)req_bodybytes);
}
req->req_body_status = REQ_BODY_CACHED;
- return (req->req_bodybytes);
+ return (req_bodybytes);
}
/*----------------------------------------------------------------------
@@ -188,8 +188,8 @@ VRB_Iterate(struct req *req, objiterate_f *func, void *priv)
switch (req->req_body_status) {
case REQ_BODY_CACHED:
- if (req->req_bodybytes > 0 &&
- ObjIterate(req->wrk, req->body_oc, priv, func, 0))
+ AN(req->body_oc);
+ if (ObjIterate(req->wrk, req->body_oc, priv, func, 0))
return (-1);
return (0);
case REQ_BODY_NONE:
@@ -280,6 +280,7 @@ VRB_Free(struct req *req)
ssize_t
VRB_Cache(struct req *req, ssize_t maxsize)
{
+ uint64_t u;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
assert(maxsize >= 0);
@@ -295,7 +296,8 @@ VRB_Cache(struct req *req, ssize_t maxsize)
assert (req->req_step == R_STP_RECV);
switch (req->req_body_status) {
case REQ_BODY_CACHED:
- return (req->req_bodybytes);
+ AZ(ObjGetU64(req->wrk, req->body_oc, OA_LEN, &u));
+ return (u);
case REQ_BODY_FAIL:
return (-1);
case REQ_BODY_NONE:
More information about the varnish-commit
mailing list