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

Eliminate the cnt_start state by folding it into cnt_recv

parent 5d82c73b
......@@ -50,7 +50,7 @@
*DOT hash -> CNT_Request [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP"
*DOT color=blue]
*DOT disembark -> hash [style=dotted, color=blue]
*DOT http1_wait -> CNT_Request [label="S_STP_WORKING\nR_STP_START"]
*DOT http1_wait -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
*DOT http1_wait -> disembark [label="Session close"]
*DOT http1_wait -> disembark [label="Timeout" color=green]
*DOT disembark -> waiter [style=dotted, color=green]
......@@ -59,7 +59,7 @@
*DOT [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP" color=blue]
*DOT CNT_Request -> http1_cleanup
*DOT http1_cleanup -> disembark [label="Session close"]
*DOT http1_cleanup -> CNT_Request [label="S_STP_WORKING\nR_STP_START"]
*DOT http1_cleanup -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
*DOT http1_cleanup -> http1_wait [label="S_STP_NEWREQ"]
*DOT
*DOT }
......@@ -331,10 +331,10 @@ HTTP1_Session(struct worker *wrk, struct req *req)
assert(
sp->sess_step == S_STP_NEWREQ ||
req->req_step == R_STP_LOOKUP ||
req->req_step == R_STP_START);
req->req_step == R_STP_RECV);
if (sp->sess_step == S_STP_WORKING) {
if (req->req_step == R_STP_START)
if (req->req_step == R_STP_RECV)
done = http1_dissect(wrk, req);
if (done == 0)
done = CNT_Request(wrk, req);
......@@ -350,7 +350,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
break;
case SESS_DONE_RET_START:
sp->sess_step = S_STP_WORKING;
req->req_step = R_STP_START;
req->req_step = R_STP_RECV;
break;
default:
WRONG("Illegal enum http1_cleanup_ret");
......@@ -362,7 +362,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (done)
return;
sp->sess_step = S_STP_WORKING;
req->req_step = R_STP_START;
req->req_step = R_STP_RECV;
}
}
}
......@@ -1105,6 +1105,16 @@ cnt_recv(const struct worker *wrk, struct req *req)
AZ(req->obj);
AZ(req->busyobj);
/* Assign XID and log */
req->xid = ++xids; /* XXX not locked */
VSLb(req->vsl, SLT_ReqStart, "%s %s %u",
req->sp->addr, req->sp->port, req->xid);
if (req->err_code) {
req->req_step = R_STP_ERROR;
return (0);
}
/* By default we use the first backend */
AZ(req->director);
req->director = req->vcl->director[0];
......@@ -1168,42 +1178,6 @@ cnt_recv(const struct worker *wrk, struct req *req)
}
}
/*--------------------------------------------------------------------
* START
* First time we see a request
*
DOT start [
DOT shape=box
DOT label="cnt_start:\nDissect request\nHandle expect"
DOT ]
DOT start -> recv [style=bold,color=green]
DOT start -> DONE [label=errors]
*/
static int
cnt_start(struct worker *wrk, struct req *req)
{
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AZ(req->restarts);
AZ(req->obj);
AN(req->vcl);
AZ(req->esi_level);
assert(!isnan(req->t_req));
/* Assign XID and log */
req->xid = ++xids; /* XXX not locked */
VSLb(req->vsl, SLT_ReqStart, "%s %s %u",
req->sp->addr, req->sp->port, req->xid);
if (req->err_code)
req->req_step = R_STP_ERROR;
else
req->req_step = R_STP_RECV;
return (0);
}
/*--------------------------------------------------------------------
* Central state engine dispatcher.
*
......@@ -1235,8 +1209,7 @@ CNT_Request(struct worker *wrk, struct req *req)
*/
assert(
req->req_step == R_STP_LOOKUP ||
req->req_step == R_STP_START ||
req->req_step == R_STP_RECV); // from ESI
req->req_step == R_STP_RECV);
req->wrk = wrk;
......
......@@ -38,7 +38,6 @@ SESS_STEP(working, WORKING)
#ifdef REQ_STEP
REQ_STEP(restart, RESTART, (wrk, req))
REQ_STEP(recv, RECV, (wrk, req))
REQ_STEP(start, START, (wrk, req))
REQ_STEP(pipe, PIPE, (wrk, req))
REQ_STEP(pass, PASS, (wrk, req))
REQ_STEP(lookup, LOOKUP, (wrk, req))
......
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