[master] a2d05b3 Now it is starting to look like a finite state engine...
Poul-Henning Kamp
phk at FreeBSD.org
Tue Mar 24 13:02:48 CET 2015
commit a2d05b3204cd8a7d5fdb4c36c998c30e5a5f074a
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Mar 24 10:04:10 2015 +0000
Now it is starting to look like a finite state engine...
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index ac76ca2..6f2bb68 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -349,7 +349,6 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (nxt != REQ_FSM_MORE)
return;
sp->sess_step = S_STP_H1WORKING;
- req->req_step = R_STP_RECV;
break;
case S_STP_H1BUSY:
/*
@@ -364,28 +363,25 @@ HTTP1_Session(struct worker *wrk, struct req *req)
AN(http1_cleanup(sp, wrk, req));
return;
}
- sp->sess_step = S_STP_H1WORKING;
+ sp->sess_step = S_STP_H1PROC;
break;
case S_STP_H1WORKING:
- assert(
- req->req_step == R_STP_LOOKUP ||
- req->req_step == R_STP_RECV);
-
- if (req->req_step == R_STP_RECV) {
- if (http1_dissect(wrk, req)) {
- SES_Close(req->sp, req->doclose);
- nxt = REQ_FSM_DONE;
- } else {
- nxt = REQ_FSM_MORE;
- }
+ if (http1_dissect(wrk, req)) {
+ SES_Close(req->sp, req->doclose);
+ sp->sess_step = S_STP_H1CLEANUP;
+ break;
}
- if (nxt == REQ_FSM_MORE)
- nxt = CNT_Request(wrk, req);
- if (nxt == REQ_FSM_DISEMBARK) {
+ req->req_step = R_STP_RECV;
+ sp->sess_step = S_STP_H1PROC;
+ break;
+ case S_STP_H1PROC:
+ if (CNT_Request(wrk, req) == REQ_FSM_DISEMBARK) {
sp->sess_step = S_STP_H1BUSY;
return;
}
- assert(nxt == REQ_FSM_DONE);
+ sp->sess_step = S_STP_H1CLEANUP;
+ break;
+ case S_STP_H1CLEANUP:
if (http1_cleanup(sp, wrk, req))
return;
SES_RxReInit(req->htc);
@@ -396,7 +392,6 @@ HTTP1_Session(struct worker *wrk, struct req *req)
req->acct.req_hdrbytes +=
req->htc->rxbuf_e - req->htc->rxbuf_b;
sp->sess_step = S_STP_H1WORKING;
- req->req_step = R_STP_RECV;
} else {
if (req->htc->rxbuf_e != req->htc->rxbuf_b)
wrk->stats->sess_readahead++;
More information about the varnish-commit
mailing list