void SES_ReleaseReq(struct req *req) { struct sess *sp; struct sesspool *pp; CHECK_OBJ_NOTNULL(req, REQ_MAGIC); /* Make sure the request counters have all been zeroed */ #define ACCT(foo) \ AZ(req->acct.foo); #include "tbl/acct_fields_req.h" #undef ACCT AZ(req->vcl); if (req->vsl->wid) VSL_End(req->vsl); sp = req->sp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); CHECK_OBJ_NOTNULL(req, REQ_MAGIC); MPL_AssertSane(req); VSL_Flush(req->vsl, 0); req->sp = NULL; MPL_Free(pp->mpl_req, req); }
void SES_Delete(struct sess *sp, enum sess_close reason, double now) { struct sesspool *pp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); if (reason != SC_NULL) SES_Close(sp, reason); assert(sp->fd < 0); if (isnan(now)) now = VTIM_real(); AZ(isnan(sp->t_open)); VSL(SLT_SessClose, sp->vxid, "%s %.3f", sess_close_2str(sp->reason, 0), now - sp->t_open); VSL(SLT_End, sp->vxid, "%s", ""); Lck_Delete(&sp->mtx); MPL_Free(pp->mpl_sess, sp); }
void SES_ReleaseReq(struct req *req) { struct sess *sp; struct sesspool *pp; CHECK_OBJ_NOTNULL(req, REQ_MAGIC); AZ(req->vcl); #define ACCT(foo) AZ(req->acct_req.foo); #include "tbl/acct_fields.h" #undef ACCT sp = req->sp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); CHECK_OBJ_NOTNULL(req, REQ_MAGIC); MPL_AssertSane(req); if (req->vsl->wid != 0) /* Non-released VXID - assume it was from a req */ VSLb(req->vsl, SLT_End, "%s", ""); VSL_Flush(req->vsl, 0); req->sp = NULL; MPL_Free(pp->mpl_req, req); }
void SES_Delete(struct sess *sp, enum sess_close reason, double now) { struct acct *b; struct sesspool *pp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); if (reason != SC_NULL) SES_Close(sp, reason); assert(sp->fd < 0); if (isnan(now)) now = VTIM_real(); assert(!isnan(sp->t_open)); b = &sp->acct_ses; VSL(SLT_SessClose, sp->vxid, "%s %.3f %ju %ju %ju %ju %ju %ju", sess_close_2str(sp->reason, 0), now - sp->t_open, b->req, b->pipe, b->pass, b->fetch, b->hdrbytes, b->bodybytes); VSL(SLT_End, sp->vxid, "%s", ""); Lck_Delete(&sp->mtx); MPL_Free(pp->mpl_sess, sp); }
/* Private interface from backend_cfg.c */ void VBE_ReleaseConn(struct vbc *vc) { CHECK_OBJ_NOTNULL(vc, VBC_MAGIC); assert(vc->backend == NULL); assert(vc->fd < 0); MPL_Free(vbcpool, vc); }
void SES_ReleaseReq(struct sess *sp) { struct sesspool *pp; pp = ses_getpool(sp); CHECK_OBJ_NOTNULL(sp->req, REQ_MAGIC); MPL_AssertSane(sp->req); MPL_Free(pp->mpl_req, sp->req); sp->req = NULL; }
void VBO_Free(struct busyobj **bop) { struct busyobj *bo; AN(bop); bo = *bop; *bop = NULL; CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); AZ(bo->refcount); AZ(pthread_cond_destroy(&bo->cond)); Lck_Delete(&bo->mtx); MPL_Free(vbopool, bo); }
void SES_ReleaseReq(struct sess *sp) { struct sesspool *pp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); CHECK_OBJ_NOTNULL(sp->req, REQ_MAGIC); MPL_AssertSane(sp->req); WSL_Flush(sp->req->vsl, 0); MPL_Free(pp->mpl_req, sp->req); sp->req = NULL; }
void SES_Rel(struct sess *sp) { int i; struct pool *pp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->pool; CHECK_OBJ_NOTNULL(pp, POOL_MAGIC); Lck_Lock(&sp->mtx); assert(sp->refcnt > 0); i = --sp->refcnt; Lck_Unlock(&sp->mtx); if (i) return; Lck_Delete(&sp->mtx); MPL_Free(sp->pool->mpl_sess, sp); }
void SES_Delete(struct sess *sp, const char *reason, double now) { struct acct *b; struct worker *wrk; struct sesspool *pp; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); pp = sp->sesspool; CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); AN(pp->pool); wrk = sp->wrk; CHECK_OBJ_ORNULL(wrk, WORKER_MAGIC); if (reason != NULL) SES_Close(sp, reason); if (isnan(now)) now = VTIM_real(); assert(!isnan(sp->t_open)); assert(sp->fd < 0); if (sp->req != NULL) { AZ(sp->req->vcl); SES_ReleaseReq(sp); } if (*sp->addr == '\0') strcpy(sp->addr, "-"); if (*sp->port == '\0') strcpy(sp->addr, "-"); b = &sp->acct_ses; VSL(SLT_StatSess, sp->vsl_id, "%s %s %.0f %ju %ju %ju %ju %ju %ju %ju", sp->addr, sp->port, now - sp->t_open, b->sess, b->req, b->pipe, b->pass, b->fetch, b->hdrbytes, b->bodybytes); MPL_Free(pp->mpl_sess, sp); }