Commit 42780ae2 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

move the STP_ values out of the session state functions

parent c6b0aaa1
...@@ -172,7 +172,6 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -172,7 +172,6 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
if (i == 1) { if (i == 1) {
/* Got it, run with it */ /* Got it, run with it */
req->t_req = now; req->t_req = now;
sp->step = STP_START;
return (0); return (0);
} else if (i == -1) { } else if (i == -1) {
why = "EOF"; why = "EOF";
...@@ -226,7 +225,13 @@ DOT DONE -> wait ...@@ -226,7 +225,13 @@ DOT DONE -> wait
DOT DONE -> ESI_RESP DOT DONE -> ESI_RESP
*/ */
static int enum cnt_sess_done_ret {
SESS_DONE_RET_GONE,
SESS_DONE_RET_WAIT,
SESS_DONE_RET_START,
};
static enum cnt_sess_done_ret
cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
{ {
double dh, dp, da; double dh, dp, da;
...@@ -291,7 +296,7 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -291,7 +296,7 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
if (sp->fd < 0) { if (sp->fd < 0) {
wrk->stats.sess_closed++; wrk->stats.sess_closed++;
SES_Delete(sp, NULL, NAN); SES_Delete(sp, NULL, NAN);
return (1); return (SESS_DONE_RET_GONE);
} }
if (wrk->stats.client_req >= cache_param->wthread_stats_rate) if (wrk->stats.client_req >= cache_param->wthread_stats_rate)
...@@ -304,15 +309,14 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -304,15 +309,14 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
if (i == 1) { if (i == 1) {
req->t_req = sp->t_idle; req->t_req = sp->t_idle;
wrk->stats.sess_pipeline++; wrk->stats.sess_pipeline++;
sp->step = STP_START; return (SESS_DONE_RET_START);
} else { } else {
sp->t_rx = sp->t_idle; sp->t_rx = sp->t_idle;
req->t_req = NAN; req->t_req = NAN;
if (Tlen(req->htc->rxbuf)) if (Tlen(req->htc->rxbuf))
wrk->stats.sess_readahead++; wrk->stats.sess_readahead++;
sp->step = STP_WAIT; return (SESS_DONE_RET_WAIT);
} }
return (0);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -322,6 +326,7 @@ void ...@@ -322,6 +326,7 @@ void
CNT_Session(struct sess *sp) CNT_Session(struct sess *sp)
{ {
int done; int done;
enum cnt_sess_done_ret sdr;
struct worker *wrk; struct worker *wrk;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
...@@ -341,7 +346,8 @@ CNT_Session(struct sess *sp) ...@@ -341,7 +346,8 @@ CNT_Session(struct sess *sp)
SES_Close(sp, "remote closed"); SES_Close(sp, "remote closed");
else else
SES_Close(sp, "error"); SES_Close(sp, "error");
assert(cnt_sess_done(sp, wrk, sp->req) == 1); sdr = cnt_sess_done(sp, wrk, sp->req);
assert(sdr == SESS_DONE_RET_GONE);
return; return;
} }
...@@ -352,23 +358,33 @@ CNT_Session(struct sess *sp) ...@@ -352,23 +358,33 @@ CNT_Session(struct sess *sp)
assert( assert(
sp->step == STP_WAIT || sp->step == STP_WAIT ||
sp->step == STP_LOOKUP || sp->step == STP_LOOKUP ||
sp->step == STP_START || sp->step == STP_START);
sp->step == STP_RECV);
if (sp->step != STP_WAIT) { if (sp->step != STP_WAIT) {
done = CNT_Request(sp->req); done = CNT_Request(sp->req);
if (done == 2) if (done == 2)
return; return;
assert(done == 1); assert(done == 1);
done = cnt_sess_done(sp, wrk, sp->req); sdr = cnt_sess_done(sp, wrk, sp->req);
if (done) switch (sdr) {
case SESS_DONE_RET_GONE:
return; return;
case SESS_DONE_RET_WAIT:
sp->step = STP_WAIT;
break;
case SESS_DONE_RET_START:
sp->step = STP_START;
break;
default:
WRONG("Illegal enum cnt_sess_done_ret");
}
} }
if (sp->step == STP_WAIT) { if (sp->step == STP_WAIT) {
done = cnt_wait(sp, wrk, sp->req); done = cnt_wait(sp, wrk, sp->req);
if (done) if (done)
return; return;
sp->step = STP_START;
} }
} }
} }
......
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