Commit 6dfad3d4 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Totally eliminate sp->wrk

parent 09bf441e
...@@ -660,7 +660,6 @@ struct sess { ...@@ -660,7 +660,6 @@ struct sess {
/* Cross references ------------------------------------------*/ /* Cross references ------------------------------------------*/
struct sesspool *sesspool; struct sesspool *sesspool;
struct worker *wrk;
struct req *req; struct req *req;
struct pool_task task; struct pool_task task;
...@@ -926,7 +925,7 @@ unsigned WRW_WriteH(const struct worker *w, const txt *hh, const char *suf); ...@@ -926,7 +925,7 @@ unsigned WRW_WriteH(const struct worker *w, const txt *hh, const char *suf);
/* cache_session.c [SES] */ /* cache_session.c [SES] */
void SES_Close(struct sess *sp, const char *reason); void SES_Close(struct sess *sp, const char *reason);
void SES_Delete(struct sess *sp, const char *reason, double now); void SES_Delete(struct sess *sp, const char *reason, double now);
void SES_Charge(struct sess *sp); void SES_Charge(struct worker *, struct sess *);
struct sesspool *SES_NewPool(struct pool *pp, unsigned pool_no); struct sesspool *SES_NewPool(struct pool *pp, unsigned pool_no);
void SES_DeletePool(struct sesspool *sp); void SES_DeletePool(struct sesspool *sp);
int SES_Schedule(struct sess *sp); int SES_Schedule(struct sess *sp);
......
...@@ -191,7 +191,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -191,7 +191,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
if (when < now || tmo == 0) { if (when < now || tmo == 0) {
sp->t_rx = NAN; sp->t_rx = NAN;
wrk->stats.sess_herd++; wrk->stats.sess_herd++;
SES_Charge(sp); SES_Charge(wrk, sp);
SES_ReleaseReq(sp); SES_ReleaseReq(sp);
WAIT_Enter(sp); WAIT_Enter(sp);
return (1); return (1);
...@@ -206,7 +206,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -206,7 +206,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
} }
} }
} }
SES_Charge(sp); SES_Charge(wrk, sp);
SES_Delete(sp, why, now); SES_Delete(sp, why, now);
return (1); return (1);
} }
...@@ -360,11 +360,9 @@ CNT_Session(struct worker *wrk, struct sess *sp) ...@@ -360,11 +360,9 @@ CNT_Session(struct worker *wrk, struct sess *sp)
sp->req->req_step == R_STP_START))); sp->req->req_step == R_STP_START)));
if (sp->sess_step == S_STP_WORKING) { if (sp->sess_step == S_STP_WORKING) {
done = CNT_Request(sp->wrk, sp->req); done = CNT_Request(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) {
...@@ -1626,7 +1624,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1626,7 +1624,7 @@ CNT_Request(struct worker *wrk, struct req *req)
CHECK_OBJ_ORNULL(wrk->nobjhead, OBJHEAD_MAGIC); CHECK_OBJ_ORNULL(wrk->nobjhead, OBJHEAD_MAGIC);
} }
if (done == 1) if (done == 1)
SES_Charge(req->sp); SES_Charge(wrk, req->sp);
req->wrk = NULL; req->wrk = NULL;
......
...@@ -424,7 +424,7 @@ HSH_Lookup(struct req *req) ...@@ -424,7 +424,7 @@ HSH_Lookup(struct req *req)
if (cache_param->diag_bitmap & 0x20) if (cache_param->diag_bitmap & 0x20)
VSLb(req->vsl, SLT_Debug, VSLb(req->vsl, SLT_Debug,
"on waiting list <%p>", oh); "on waiting list <%p>", oh);
SES_Charge(req->sp); SES_Charge(req->wrk, req->sp);
/* /*
* The objhead reference transfers to the sess, we get it * The objhead reference transfers to the sess, we get it
* back when the sess comes off the waiting list and * back when the sess comes off the waiting list and
......
...@@ -61,15 +61,19 @@ struct sesspool { ...@@ -61,15 +61,19 @@ struct sesspool {
*/ */
void void
SES_Charge(struct sess *sp) SES_Charge(struct worker *wrk, struct sess *sp)
{ {
struct acct *a = &sp->wrk->acct_tmp; struct acct *a;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(sp->req, REQ_MAGIC); CHECK_OBJ_NOTNULL(sp->req, REQ_MAGIC);
a = &wrk->acct_tmp;
sp->req->req_bodybytes += a->bodybytes; sp->req->req_bodybytes += a->bodybytes;
#define ACCT(foo) \ #define ACCT(foo) \
sp->wrk->stats.s_##foo += a->foo; \ wrk->stats.s_##foo += a->foo; \
sp->acct_ses.foo += a->foo; \ sp->acct_ses.foo += a->foo; \
a->foo = 0; a->foo = 0;
#include "tbl/acct_fields.h" #include "tbl/acct_fields.h"
...@@ -126,8 +130,6 @@ ses_pool_task(struct worker *wrk, void *arg) ...@@ -126,8 +130,6 @@ ses_pool_task(struct worker *wrk, void *arg)
AZ(wrk->aws->r); AZ(wrk->aws->r);
wrk->lastused = NAN; wrk->lastused = NAN;
THR_SetSession(sp); THR_SetSession(sp);
AZ(sp->wrk);
sp->wrk = wrk;
CNT_Session(wrk, 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);
...@@ -174,12 +176,10 @@ SES_Schedule(struct sess *sp) ...@@ -174,12 +176,10 @@ SES_Schedule(struct sess *sp)
struct sesspool *pp; struct sesspool *pp;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
AZ(sp->wrk);
pp = sp->sesspool; pp = sp->sesspool;
CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC);
AN(pp->pool); AN(pp->pool);
AZ(sp->wrk);
sp->task.func = ses_pool_task; sp->task.func = ses_pool_task;
sp->task.priv = sp; sp->task.priv = sp;
...@@ -243,7 +243,6 @@ void ...@@ -243,7 +243,6 @@ void
SES_Delete(struct sess *sp, const char *reason, double now) SES_Delete(struct sess *sp, const char *reason, double now)
{ {
struct acct *b; struct acct *b;
struct worker *wrk;
struct sesspool *pp; struct sesspool *pp;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
...@@ -251,9 +250,6 @@ SES_Delete(struct sess *sp, const char *reason, double now) ...@@ -251,9 +250,6 @@ SES_Delete(struct sess *sp, const char *reason, double now)
CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC); CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC);
AN(pp->pool); AN(pp->pool);
wrk = sp->wrk;
CHECK_OBJ_ORNULL(wrk, WORKER_MAGIC);
if (reason != NULL) if (reason != NULL)
SES_Close(sp, reason); SES_Close(sp, reason);
if (isnan(now)) if (isnan(now))
......
...@@ -67,10 +67,8 @@ WAIT_Enter(struct sess *sp) ...@@ -67,10 +67,8 @@ WAIT_Enter(struct sess *sp)
{ {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
AZ(sp->req); AZ(sp->req);
assert(sp->fd >= 0); assert(sp->fd >= 0);
sp->wrk = NULL;
/* /*
* Set nonblocking in the worker-thread, before passing to the * Set nonblocking in the worker-thread, before passing to the
......
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