[master] 9827226 More req->obj low hanging fruit
Poul-Henning Kamp
phk at FreeBSD.org
Tue Aug 5 14:38:50 CEST 2014
commit 982722651d0dc6a23cd10c219110341bac1b0b56
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Aug 5 12:38:33 2014 +0000
More req->obj low hanging fruit
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index ba145ea..12cb10f 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -262,9 +262,13 @@ ESI_Deliver(struct req *req)
size_t dl;
const void *dp;
int i;
+ struct object *obj;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+ CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
p = ObjGetattr(req->objcore, &req->wrk->stats, OA_ESIDATA, &l);
+ obj = ObjGetObj(req->objcore, &req->wrk->stats);
+ CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
AN(p);
assert(l > 0);
e = p + l;
@@ -304,7 +308,7 @@ ESI_Deliver(struct req *req)
AZ(dl);
}
- st = VTAILQ_FIRST(&req->obj->body->list);
+ st = VTAILQ_FIRST(&obj->body->list);
off = 0;
while (p < e) {
@@ -455,14 +459,15 @@ ESI_Deliver(struct req *req)
*/
static uint8_t
-ved_deliver_byterange(struct req *req, ssize_t low, ssize_t high)
+ved_deliver_byterange(struct req *req, const struct object *obj, ssize_t low,
+ ssize_t high)
{
struct storage *st;
ssize_t l, lx;
u_char *p;
lx = 0;
- VTAILQ_FOREACH(st, &req->obj->body->list, list) {
+ VTAILQ_FOREACH(st, &obj->body->list, list) {
p = st->ptr;
l = st->len;
if (lx + l < low) {
@@ -505,8 +510,13 @@ ESI_DeliverChild(struct req *req)
uint8_t tailbuf[8];
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
- if (!req->obj->gziped) {
- VTAILQ_FOREACH(st, &req->obj->body->list, list)
+ CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
+
+ obj = ObjGetObj(req->objcore, &req->wrk->stats);
+ CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
+
+ if (!obj->gziped) {
+ VTAILQ_FOREACH(st, &obj->body->list, list)
ved_pretend_gzip(req, st->ptr, st->len);
return;
}
@@ -518,8 +528,6 @@ ESI_DeliverChild(struct req *req)
dbits = (void*)WS_Alloc(req->ws, 8);
AN(dbits);
- obj = req->obj;
- CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
p = ObjGetattr(obj->objcore, &req->wrk->stats, OA_GZIPBITS, &l);
AN(p);
assert(l == 24);
@@ -539,10 +547,10 @@ ESI_DeliverChild(struct req *req)
* XXX: optimize for the case where the 'last'
* XXX: bit is in a empty copy block
*/
- *dbits = ved_deliver_byterange(req, start/8, last/8);
+ *dbits = ved_deliver_byterange(req, obj, start/8, last/8);
*dbits &= ~(1U << (last & 7));
req->resp_bodybytes += WRW_Write(req->wrk, dbits, 1);
- cc = ved_deliver_byterange(req, 1 + last/8, stop/8);
+ cc = ved_deliver_byterange(req, obj, 1 + last/8, stop/8);
switch((int)(stop & 7)) {
case 0: /* xxxxxxxx */
/* I think we have an off by one here, but that's OK */
@@ -588,7 +596,7 @@ ESI_DeliverChild(struct req *req)
req->resp_bodybytes += WRW_Write(req->wrk, dbits + 1, lpad);
/* We need the entire tail, but it may not be in one storage segment */
- st = VTAILQ_LAST(&req->obj->body->list, storagehead);
+ st = VTAILQ_LAST(&obj->body->list, storagehead);
for (i = sizeof tailbuf; i > 0; i -= j) {
j = st->len;
if (j > i)
More information about the varnish-commit
mailing list