Commit 09bf441e authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Mostly move sp->wrk to req->wrk

parent 78ad7c4c
...@@ -568,6 +568,7 @@ struct req { ...@@ -568,6 +568,7 @@ struct req {
uint8_t hash_always_miss; uint8_t hash_always_miss;
struct sess *sp; struct sess *sp;
struct worker *wrk;
enum req_step req_step; enum req_step req_step;
VTAILQ_ENTRY(req) w_list; VTAILQ_ENTRY(req) w_list;
...@@ -744,7 +745,7 @@ void VBO_Free(struct busyobj **vbo); ...@@ -744,7 +745,7 @@ void VBO_Free(struct busyobj **vbo);
/* cache_center.c [CNT] */ /* cache_center.c [CNT] */
int CNT_Request(struct worker *, struct req *); int CNT_Request(struct worker *, struct req *);
void CNT_Session(struct sess *); void CNT_Session(struct worker *, struct sess *);
void CNT_Init(void); void CNT_Init(void);
/* cache_cli.c [CLI] */ /* cache_cli.c [CLI] */
......
...@@ -323,15 +323,13 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -323,15 +323,13 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
*/ */
void void
CNT_Session(struct sess *sp) CNT_Session(struct worker *wrk, struct sess *sp)
{ {
int done; int done;
enum cnt_sess_done_ret sdr; enum cnt_sess_done_ret sdr;
struct worker *wrk;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
wrk = sp->wrk;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
/* /*
* Whenever we come in from the acceptor or waiter, we need to set * Whenever we come in from the acceptor or waiter, we need to set
...@@ -363,8 +361,10 @@ CNT_Session(struct sess *sp) ...@@ -363,8 +361,10 @@ CNT_Session(struct sess *sp)
if (sp->sess_step == S_STP_WORKING) { if (sp->sess_step == S_STP_WORKING) {
done = CNT_Request(sp->wrk, sp->req); done = CNT_Request(sp->wrk, sp->req);
if (done == 2) if (done == 2) {
sp->wrk = NULL;
return; return;
}
assert(done == 1); assert(done == 1);
sdr = cnt_sess_done(sp, wrk, sp->req); sdr = cnt_sess_done(sp, wrk, sp->req);
switch (sdr) { switch (sdr) {
...@@ -1598,6 +1598,8 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1598,6 +1598,8 @@ CNT_Request(struct worker *wrk, struct req *req)
req->req_step == R_STP_START || req->req_step == R_STP_START ||
req->req_step == R_STP_RECV); req->req_step == R_STP_RECV);
req->wrk = wrk;
for (done = 0; !done; ) { for (done = 0; !done; ) {
/* /*
* This is a good place to be paranoid about the various * This is a good place to be paranoid about the various
...@@ -1626,6 +1628,8 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1626,6 +1628,8 @@ CNT_Request(struct worker *wrk, struct req *req)
if (done == 1) if (done == 1)
SES_Charge(req->sp); SES_Charge(req->sp);
req->wrk = NULL;
assert(WRW_IsReleased(wrk)); assert(WRW_IsReleased(wrk));
return (done); return (done);
} }
......
...@@ -51,7 +51,7 @@ ved_include(struct req *req, const char *src, const char *host) ...@@ -51,7 +51,7 @@ ved_include(struct req *req, const char *src, const char *host)
unsigned sxid, res_mode; unsigned sxid, res_mode;
int i; int i;
wrk = req->sp->wrk; wrk = req->wrk;
if (req->esi_level >= cache_param->max_esi_depth) if (req->esi_level >= cache_param->max_esi_depth)
return; return;
...@@ -94,17 +94,17 @@ ved_include(struct req *req, const char *src, const char *host) ...@@ -94,17 +94,17 @@ ved_include(struct req *req, const char *src, const char *host)
sxid = req->xid; sxid = req->xid;
while (1) { while (1) {
req->sp->wrk = wrk; req->wrk = wrk;
i = CNT_Request(wrk, req); i = CNT_Request(wrk, req);
if (i == 1) if (i == 1)
break; break;
assert(i == 2); assert(i == 2);
AZ(req->sp->wrk); AZ(req->wrk);
DSL(0x20, SLT_Debug, req->sp->vsl_id, "loop waiting for ESI"); DSL(0x20, SLT_Debug, req->sp->vsl_id, "loop waiting for ESI");
(void)usleep(10000); (void)usleep(10000);
} }
req->xid = sxid; req->xid = sxid;
AN(req->sp->wrk); req->wrk = wrk;
req->esi_level--; req->esi_level--;
req->obj = obj; req->obj = obj;
req->res_mode = res_mode; req->res_mode = res_mode;
...@@ -113,9 +113,9 @@ ved_include(struct req *req, const char *src, const char *host) ...@@ -113,9 +113,9 @@ ved_include(struct req *req, const char *src, const char *host)
WS_Reset(req->ws, sp_ws_wm); WS_Reset(req->ws, sp_ws_wm);
WS_Reset(wrk->aws, wrk_ws_wm); /* XXX ? */ WS_Reset(wrk->aws, wrk_ws_wm); /* XXX ? */
WRW_Reserve(req->sp->wrk, &req->sp->fd, req->vsl, req->t_resp); WRW_Reserve(req->wrk, &req->sp->fd, req->vsl, req->t_resp);
if (req->res_mode & RES_CHUNKED) if (req->res_mode & RES_CHUNKED)
WRW_Chunked(req->sp->wrk); WRW_Chunked(req->wrk);
} }
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
...@@ -185,22 +185,22 @@ ved_pretend_gzip(struct req *req, const uint8_t *p, ssize_t l) ...@@ -185,22 +185,22 @@ ved_pretend_gzip(struct req *req, const uint8_t *p, ssize_t l)
while (l > 0) { while (l > 0) {
if (l >= 65535) { if (l >= 65535) {
lx = 65535; lx = 65535;
(void)WRW_Write(req->sp->wrk, buf1, sizeof buf1); (void)WRW_Write(req->wrk, buf1, sizeof buf1);
} else { } else {
lx = (uint16_t)l; lx = (uint16_t)l;
buf2[0] = 0; buf2[0] = 0;
vle16enc(buf2 + 1, lx); vle16enc(buf2 + 1, lx);
vle16enc(buf2 + 3, ~lx); vle16enc(buf2 + 3, ~lx);
(void)WRW_Write(req->sp->wrk, buf2, sizeof buf2); (void)WRW_Write(req->wrk, buf2, sizeof buf2);
} }
(void)WRW_Write(req->sp->wrk, p, lx); (void)WRW_Write(req->wrk, p, lx);
req->crc = crc32(req->crc, p, lx); req->crc = crc32(req->crc, p, lx);
req->l_crc += lx; req->l_crc += lx;
l -= lx; l -= lx;
p += lx; p += lx;
} }
/* buf2 is local, have to flush */ /* buf2 is local, have to flush */
(void)WRW_Flush(req->sp->wrk); (void)WRW_Flush(req->wrk);
} }
/*--------------------------------------------------------------------- /*---------------------------------------------------------------------
...@@ -250,7 +250,7 @@ ESI_Deliver(struct req *req) ...@@ -250,7 +250,7 @@ ESI_Deliver(struct req *req)
if (isgzip && !(req->res_mode & RES_GUNZIP)) { if (isgzip && !(req->res_mode & RES_GUNZIP)) {
assert(sizeof gzip_hdr == 10); assert(sizeof gzip_hdr == 10);
/* Send out the gzip header */ /* Send out the gzip header */
(void)WRW_Write(req->sp->wrk, gzip_hdr, 10); (void)WRW_Write(req->wrk, gzip_hdr, 10);
req->l_crc = 0; req->l_crc = 0;
req->gzip_resp = 1; req->gzip_resp = 1;
req->crc = crc32(0L, Z_NULL, 0); req->crc = crc32(0L, Z_NULL, 0);
...@@ -306,7 +306,7 @@ ESI_Deliver(struct req *req) ...@@ -306,7 +306,7 @@ ESI_Deliver(struct req *req)
* We have a gzip'ed VEC and delivers * We have a gzip'ed VEC and delivers
* a gzip'ed ESI response. * a gzip'ed ESI response.
*/ */
(void)WRW_Write(req->sp->wrk, (void)WRW_Write(req->wrk,
st->ptr + off, l2); st->ptr + off, l2);
} else if (req->gzip_resp) { } else if (req->gzip_resp) {
/* /*
...@@ -321,9 +321,9 @@ ESI_Deliver(struct req *req) ...@@ -321,9 +321,9 @@ ESI_Deliver(struct req *req)
* response * response
*/ */
AN(vgz); AN(vgz);
i = VGZ_WrwGunzip(req->sp->wrk, vgz, i = VGZ_WrwGunzip(req->wrk, vgz,
st->ptr + off, l2); st->ptr + off, l2);
if (WRW_Error(req->sp->wrk)) { if (WRW_Error(req->wrk)) {
SES_Close(req->sp, SES_Close(req->sp,
"remote closed"); "remote closed");
p = e; p = e;
...@@ -334,7 +334,7 @@ ESI_Deliver(struct req *req) ...@@ -334,7 +334,7 @@ ESI_Deliver(struct req *req)
/* /*
* Ungzip'ed VEC, ungzip'ed ESI response * Ungzip'ed VEC, ungzip'ed ESI response
*/ */
(void)WRW_Write(req->sp->wrk, (void)WRW_Write(req->wrk,
st->ptr + off, l2); st->ptr + off, l2);
} }
off += l2; off += l2;
...@@ -374,8 +374,8 @@ ESI_Deliver(struct req *req) ...@@ -374,8 +374,8 @@ ESI_Deliver(struct req *req)
r = (void*)strchr((const char*)q, '\0'); r = (void*)strchr((const char*)q, '\0');
AN(r); AN(r);
if (vgz != NULL) if (vgz != NULL)
VGZ_WrwFlush(req->sp->wrk, vgz); VGZ_WrwFlush(req->wrk, vgz);
if (WRW_Flush(req->sp->wrk)) { if (WRW_Flush(req->wrk)) {
SES_Close(req->sp, "remote closed"); SES_Close(req->sp, "remote closed");
p = e; p = e;
break; break;
...@@ -391,7 +391,7 @@ ESI_Deliver(struct req *req) ...@@ -391,7 +391,7 @@ ESI_Deliver(struct req *req)
} }
} }
if (vgz != NULL) { if (vgz != NULL) {
VGZ_WrwFlush(req->sp->wrk, vgz); VGZ_WrwFlush(req->wrk, vgz);
(void)VGZ_Destroy(&vgz); (void)VGZ_Destroy(&vgz);
} }
if (req->gzip_resp && req->esi_level == 0) { if (req->gzip_resp && req->esi_level == 0) {
...@@ -408,9 +408,9 @@ ESI_Deliver(struct req *req) ...@@ -408,9 +408,9 @@ ESI_Deliver(struct req *req)
/* MOD(2^32) length */ /* MOD(2^32) length */
vle32enc(tailbuf + 9, req->l_crc); vle32enc(tailbuf + 9, req->l_crc);
(void)WRW_Write(req->sp->wrk, tailbuf, 13); (void)WRW_Write(req->wrk, tailbuf, 13);
} }
(void)WRW_Flush(req->sp->wrk); (void)WRW_Flush(req->wrk);
} }
/*--------------------------------------------------------------------- /*---------------------------------------------------------------------
...@@ -444,7 +444,7 @@ ved_deliver_byterange(const struct req *req, ssize_t low, ssize_t high) ...@@ -444,7 +444,7 @@ ved_deliver_byterange(const struct req *req, ssize_t low, ssize_t high)
l = high - lx; l = high - lx;
assert(lx >= low && lx + l <= high); assert(lx >= low && lx + l <= high);
if (l != 0) if (l != 0)
(void)WRW_Write(req->sp->wrk, p, l); (void)WRW_Write(req->wrk, p, l);
if (p + l < st->ptr + st->len) if (p + l < st->ptr + st->len)
return(p[l]); return(p[l]);
lx += l; lx += l;
...@@ -499,7 +499,7 @@ ESI_DeliverChild(struct req *req) ...@@ -499,7 +499,7 @@ ESI_DeliverChild(struct req *req)
*/ */
*dbits = ved_deliver_byterange(req, start/8, last/8); *dbits = ved_deliver_byterange(req, start/8, last/8);
*dbits &= ~(1U << (last & 7)); *dbits &= ~(1U << (last & 7));
(void)WRW_Write(req->sp->wrk, dbits, 1); (void)WRW_Write(req->wrk, dbits, 1);
cc = ved_deliver_byterange(req, 1 + last/8, stop/8); cc = ved_deliver_byterange(req, 1 + last/8, stop/8);
switch((int)(stop & 7)) { switch((int)(stop & 7)) {
case 0: /* xxxxxxxx */ case 0: /* xxxxxxxx */
...@@ -543,7 +543,7 @@ ESI_DeliverChild(struct req *req) ...@@ -543,7 +543,7 @@ ESI_DeliverChild(struct req *req)
INCOMPL(); INCOMPL();
} }
if (lpad > 0) if (lpad > 0)
(void)WRW_Write(req->sp->wrk, dbits + 1, lpad); (void)WRW_Write(req->wrk, dbits + 1, lpad);
/* We need the entire tail, but it may not be in one storage segment */ /* We need the entire tail, but it may not be in one storage segment */
st = VTAILQ_LAST(&req->obj->store, storagehead); st = VTAILQ_LAST(&req->obj->store, storagehead);
......
...@@ -406,8 +406,8 @@ FetchReqBody(struct req *req, int sendbody) ...@@ -406,8 +406,8 @@ FetchReqBody(struct req *req, int sendbody)
content_length -= rdcnt; content_length -= rdcnt;
if (sendbody) { if (sendbody) {
/* XXX: stats ? */ /* XXX: stats ? */
(void)WRW_Write(req->sp->wrk, buf, rdcnt); (void)WRW_Write(req->wrk, buf, rdcnt);
if (WRW_Flush(req->sp->wrk)) if (WRW_Flush(req->wrk))
return (2); return (2);
} }
} }
...@@ -441,7 +441,7 @@ FetchHdr(struct req *req, int need_host_hdr, int sendbody) ...@@ -441,7 +441,7 @@ FetchHdr(struct req *req, int need_host_hdr, int sendbody)
int i; int i;
struct http_conn *htc; struct http_conn *htc;
wrk = req->sp->wrk; wrk = req->wrk;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
bo = req->busyobj; bo = req->busyobj;
......
...@@ -299,7 +299,7 @@ HSH_Lookup(struct req *req) ...@@ -299,7 +299,7 @@ HSH_Lookup(struct req *req)
int busy_found; int busy_found;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
wrk = req->sp->wrk; wrk = req->wrk;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req->http, HTTP_MAGIC); CHECK_OBJ_NOTNULL(req->http, HTTP_MAGIC);
AN(req->director); AN(req->director);
...@@ -431,7 +431,6 @@ HSH_Lookup(struct req *req) ...@@ -431,7 +431,6 @@ HSH_Lookup(struct req *req)
* calls us again * calls us again
*/ */
req->hash_objhead = oh; req->hash_objhead = oh;
req->sp->wrk = NULL;
Lck_Unlock(&oh->mtx); Lck_Unlock(&oh->mtx);
return (NULL); return (NULL);
} }
...@@ -482,9 +481,9 @@ hsh_rush(struct dstat *ds, struct objhead *oh) ...@@ -482,9 +481,9 @@ hsh_rush(struct dstat *ds, struct objhead *oh)
if (req == NULL) if (req == NULL)
break; break;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AZ(req->wrk);
sp = req->sp; sp = req->sp;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
AZ(sp->wrk);
VTAILQ_REMOVE(&wl->list, req, w_list); VTAILQ_REMOVE(&wl->list, req, w_list);
DSL(0x20, SLT_Debug, sp->vsl_id, "off waiting list"); DSL(0x20, SLT_Debug, sp->vsl_id, "off waiting list");
if (SES_Schedule(sp)) { if (SES_Schedule(sp)) {
...@@ -533,7 +532,7 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace) ...@@ -533,7 +532,7 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace)
continue; continue;
} }
(void)oc_getobj(&req->sp->wrk->stats, oc); (void)oc_getobj(&req->wrk->stats, oc);
/* XXX: still needed ? */ /* XXX: still needed ? */
xxxassert(spc >= sizeof *ocp); xxxassert(spc >= sizeof *ocp);
...@@ -551,14 +550,14 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace) ...@@ -551,14 +550,14 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace)
for (n = 0; n < nobj; n++) { for (n = 0; n < nobj; n++) {
oc = ocp[n]; oc = ocp[n];
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
o = oc_getobj(&req->sp->wrk->stats, oc); o = oc_getobj(&req->wrk->stats, oc);
if (o == NULL) if (o == NULL)
continue; continue;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
o->exp.ttl = ttl; o->exp.ttl = ttl;
o->exp.grace = grace; o->exp.grace = grace;
EXP_Rearm(o); EXP_Rearm(o);
(void)HSH_Deref(&req->sp->wrk->stats, NULL, &o); (void)HSH_Deref(&req->wrk->stats, NULL, &o);
} }
WS_Release(req->ws, 0); WS_Release(req->ws, 0);
} }
......
...@@ -261,8 +261,8 @@ pan_req(const struct req *req) ...@@ -261,8 +261,8 @@ pan_req(const struct req *req)
VSB_printf(pan_vsp, " restarts = %d, esi_level = %d\n", VSB_printf(pan_vsp, " restarts = %d, esi_level = %d\n",
req->restarts, req->esi_level); req->restarts, req->esi_level);
if (req->busyobj != NULL) if (req->wrk != NULL)
pan_busyobj(req->busyobj); pan_wrk(req->wrk);
pan_ws(req->ws, 2); pan_ws(req->ws, 2);
pan_http("req", req->http, 2); pan_http("req", req->http, 2);
...@@ -272,6 +272,9 @@ pan_req(const struct req *req) ...@@ -272,6 +272,9 @@ pan_req(const struct req *req)
if (VALID_OBJ(req->vcl, VCL_CONF_MAGIC)) if (VALID_OBJ(req->vcl, VCL_CONF_MAGIC))
pan_vcl(req->vcl); pan_vcl(req->vcl);
if (req->busyobj != NULL)
pan_busyobj(req->busyobj);
if (VALID_OBJ(req->obj, OBJECT_MAGIC)) if (VALID_OBJ(req->obj, OBJECT_MAGIC))
pan_object(req->obj); pan_object(req->obj);
...@@ -302,9 +305,6 @@ pan_sess(const struct sess *sp) ...@@ -302,9 +305,6 @@ pan_sess(const struct sess *sp)
else else
VSB_printf(pan_vsp, " step = 0x%x,\n", sp->sess_step); VSB_printf(pan_vsp, " step = 0x%x,\n", sp->sess_step);
if (sp->wrk != NULL)
pan_wrk(sp->wrk);
VSB_printf(pan_vsp, "},\n"); VSB_printf(pan_vsp, "},\n");
} }
......
...@@ -70,7 +70,7 @@ PipeRequest(struct req *req) ...@@ -70,7 +70,7 @@ PipeRequest(struct req *req)
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(req->sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(req->sp, SESS_MAGIC);
wrk = req->sp->wrk; wrk = req->wrk;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
bo = req->busyobj; bo = req->busyobj;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
......
...@@ -171,11 +171,11 @@ res_WriteGunzipObj(struct req *req) ...@@ -171,11 +171,11 @@ res_WriteGunzipObj(struct req *req)
CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC); CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
u += st->len; u += st->len;
i = VGZ_WrwGunzip(req->sp->wrk, vg, st->ptr, st->len); i = VGZ_WrwGunzip(req->wrk, vg, st->ptr, st->len);
/* XXX: error check */ /* XXX: error check */
(void)i; (void)i;
} }
VGZ_WrwFlush(req->sp->wrk, vg); VGZ_WrwFlush(req->wrk, vg);
(void)VGZ_Destroy(&vg); (void)VGZ_Destroy(&vg);
assert(u == req->obj->len); assert(u == req->obj->len);
} }
...@@ -215,8 +215,8 @@ res_WriteDirObj(const struct req *req, ssize_t low, ssize_t high) ...@@ -215,8 +215,8 @@ res_WriteDirObj(const struct req *req, ssize_t low, ssize_t high)
ptr += len; ptr += len;
req->sp->wrk->acct_tmp.bodybytes += len; req->wrk->acct_tmp.bodybytes += len;
(void)WRW_Write(req->sp->wrk, st->ptr + off, len); (void)WRW_Write(req->wrk, st->ptr + off, len);
} }
assert(u == req->obj->len); assert(u == req->obj->len);
} }
...@@ -248,20 +248,20 @@ RES_WriteObj(struct req *req) ...@@ -248,20 +248,20 @@ RES_WriteObj(struct req *req)
http_GetHdr(req->http, H_Range, &r)) http_GetHdr(req->http, H_Range, &r))
res_dorange(req, r, &low, &high); res_dorange(req, r, &low, &high);
WRW_Reserve(req->sp->wrk, &req->sp->fd, req->vsl, req->t_resp); WRW_Reserve(req->wrk, &req->sp->fd, req->vsl, req->t_resp);
/* /*
* Send HTTP protocol header, unless interior ESI object * Send HTTP protocol header, unless interior ESI object
*/ */
if (!(req->res_mode & RES_ESI_CHILD)) if (!(req->res_mode & RES_ESI_CHILD))
req->sp->wrk->acct_tmp.hdrbytes += req->wrk->acct_tmp.hdrbytes +=
http_Write(req->sp->wrk, req->resp, 1); http_Write(req->wrk, req->resp, 1);
if (!req->wantbody) if (!req->wantbody)
req->res_mode &= ~RES_CHUNKED; req->res_mode &= ~RES_CHUNKED;
if (req->res_mode & RES_CHUNKED) if (req->res_mode & RES_CHUNKED)
WRW_Chunked(req->sp->wrk); WRW_Chunked(req->wrk);
if (!req->wantbody) { if (!req->wantbody) {
/* This was a HEAD or conditional request */ /* This was a HEAD or conditional request */
...@@ -282,8 +282,8 @@ RES_WriteObj(struct req *req) ...@@ -282,8 +282,8 @@ RES_WriteObj(struct req *req)
if (req->res_mode & RES_CHUNKED && if (req->res_mode & RES_CHUNKED &&
!(req->res_mode & RES_ESI_CHILD)) !(req->res_mode & RES_ESI_CHILD))
WRW_EndChunk(req->sp->wrk); WRW_EndChunk(req->wrk);
if (WRW_FlushRelease(req->sp->wrk) && req->sp->fd >= 0) if (WRW_FlushRelease(req->wrk) && req->sp->fd >= 0)
SES_Close(req->sp, "remote closed"); SES_Close(req->sp, "remote closed");
} }
...@@ -128,7 +128,7 @@ ses_pool_task(struct worker *wrk, void *arg) ...@@ -128,7 +128,7 @@ ses_pool_task(struct worker *wrk, void *arg)
THR_SetSession(sp); THR_SetSession(sp);
AZ(sp->wrk); AZ(sp->wrk);
sp->wrk = wrk; sp->wrk = wrk;
CNT_Session(sp); CNT_Session(wrk, sp);
sp = NULL; /* Cannot access sp any longer */ sp = NULL; /* Cannot access sp any longer */
THR_SetSession(NULL); THR_SetSession(NULL);
WS_Assert(wrk->aws); WS_Assert(wrk->aws);
......
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