Commit 9d7bb01f authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Use private objcore's for req.body to reduce number of special cases.

parent ebc2350d
...@@ -964,6 +964,7 @@ VBF_Fetch(struct worker *wrk, struct req *req, struct objcore *oc, ...@@ -964,6 +964,7 @@ VBF_Fetch(struct worker *wrk, struct req *req, struct objcore *oc,
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AN(oc->flags & OC_F_BUSY);
CHECK_OBJ_ORNULL(oldoc, OBJCORE_MAGIC); CHECK_OBJ_ORNULL(oldoc, OBJCORE_MAGIC);
......
...@@ -67,8 +67,8 @@ static struct objhead *private_oh; ...@@ -67,8 +67,8 @@ static struct objhead *private_oh;
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
struct objcore * static struct objcore *
HSH_NewObjCore(struct worker *wrk) hsh_NewObjCore(struct worker *wrk)
{ {
struct objcore *oc; struct objcore *oc;
...@@ -104,7 +104,7 @@ hsh_prealloc(struct worker *wrk) ...@@ -104,7 +104,7 @@ hsh_prealloc(struct worker *wrk)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
if (wrk->nobjcore == NULL) if (wrk->nobjcore == NULL)
wrk->nobjcore = HSH_NewObjCore(wrk); wrk->nobjcore = hsh_NewObjCore(wrk);
CHECK_OBJ_NOTNULL(wrk->nobjcore, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(wrk->nobjcore, OBJCORE_MAGIC);
if (wrk->nobjhead == NULL) { if (wrk->nobjhead == NULL) {
...@@ -135,11 +135,11 @@ HSH_Private(struct worker *wrk) ...@@ -135,11 +135,11 @@ HSH_Private(struct worker *wrk)
CHECK_OBJ_NOTNULL(private_oh, OBJHEAD_MAGIC); CHECK_OBJ_NOTNULL(private_oh, OBJHEAD_MAGIC);
oc = HSH_NewObjCore(wrk); oc = hsh_NewObjCore(wrk);
AN(oc); AN(oc);
oc->refcnt = 1; oc->refcnt = 1;
oc->objhead = private_oh; oc->objhead = private_oh;
oc->flags |= OC_F_PRIVATE; oc->flags |= OC_F_PRIVATE | OC_F_BUSY;
Lck_Lock(&private_oh->mtx); Lck_Lock(&private_oh->mtx);
VTAILQ_INSERT_TAIL(&private_oh->objcs, oc, list); VTAILQ_INSERT_TAIL(&private_oh->objcs, oc, list);
private_oh->refcnt++; private_oh->refcnt++;
......
...@@ -288,6 +288,7 @@ ObjGetSpace(struct worker *wrk, struct objcore *oc, ssize_t *sz, uint8_t **ptr) ...@@ -288,6 +288,7 @@ ObjGetSpace(struct worker *wrk, struct objcore *oc, ssize_t *sz, uint8_t **ptr)
VTAILQ_INSERT_TAIL(&o->list, st, list); VTAILQ_INSERT_TAIL(&o->list, st, list);
Lck_Unlock(&oc->busyobj->mtx); Lck_Unlock(&oc->busyobj->mtx);
} else { } else {
AN(oc->flags & (OC_F_PRIVATE));
VTAILQ_INSERT_TAIL(&o->list, st, list); VTAILQ_INSERT_TAIL(&o->list, st, list);
} }
*sz = st->space - st->len; *sz = st->space - st->len;
......
...@@ -178,11 +178,8 @@ VRB_Free(struct req *req) ...@@ -178,11 +178,8 @@ VRB_Free(struct req *req)
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
if (req->body_oc != NULL) { if (req->body_oc != NULL)
ObjFreeObj(req->wrk, req->body_oc); AZ(HSH_DerefObjCore(req->wrk, &req->body_oc));
FREE_OBJ(req->body_oc);
req->body_oc = NULL;
}
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -228,7 +225,7 @@ VRB_Cache(struct req *req, ssize_t maxsize) ...@@ -228,7 +225,7 @@ VRB_Cache(struct req *req, ssize_t maxsize)
return (-1); return (-1);
} }
req->body_oc = HSH_NewObjCore(req->wrk); req->body_oc = HSH_Private(req->wrk);
AN(req->body_oc); AN(req->body_oc);
XXXAN(STV_NewObject(req->body_oc, req->wrk, TRANSIENT_STORAGE, 8)); XXXAN(STV_NewObject(req->body_oc, req->wrk, TRANSIENT_STORAGE, 8));
......
...@@ -74,7 +74,6 @@ void HSH_Purge(struct worker *, struct objhead *, double ttl, double grace, ...@@ -74,7 +74,6 @@ void HSH_Purge(struct worker *, struct objhead *, double ttl, double grace,
void HSH_config(const char *h_arg); void HSH_config(const char *h_arg);
struct busyobj *HSH_RefBusy(const struct objcore *oc); struct busyobj *HSH_RefBusy(const struct objcore *oc);
struct objcore *HSH_Private(struct worker *wrk); struct objcore *HSH_Private(struct worker *wrk);
struct objcore *HSH_NewObjCore(struct worker *wrk);
#ifdef VARNISH_CACHE_CHILD #ifdef VARNISH_CACHE_CHILD
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment