Commit b2930e5d authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Give the state engine a explanatory enum, rather than magic values

of 0, 1 and 2.
parent cd4bb90e
...@@ -57,6 +57,16 @@ ...@@ -57,6 +57,16 @@
#include "common/params.h" #include "common/params.h"
/*--------------------------------------------------------------------*/
enum req_fsm_nxt {
REQ_FSM_MORE,
REQ_FSM_DONE,
REQ_FSM_DISEMBARK,
};
/*--------------------------------------------------------------------*/
enum body_status { enum body_status {
#define BODYSTATUS(U,l) BS_##U, #define BODYSTATUS(U,l) BS_##U,
#include "tbl/body_status.h" #include "tbl/body_status.h"
...@@ -786,7 +796,7 @@ int HTTP1_CacheReqBody(struct req *req, ssize_t maxsize); ...@@ -786,7 +796,7 @@ int HTTP1_CacheReqBody(struct req *req, ssize_t maxsize);
int HTTP1_IterateReqBody(struct req *req, req_body_iter_f *func, void *priv); int HTTP1_IterateReqBody(struct req *req, req_body_iter_f *func, void *priv);
/* cache_req_fsm.c [CNT] */ /* cache_req_fsm.c [CNT] */
int CNT_Request(struct worker *, struct req *); enum req_fsm_nxt CNT_Request(struct worker *, struct req *);
/* cache_cli.c [CLI] */ /* cache_cli.c [CLI] */
void CLI_Init(void); void CLI_Init(void);
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
* Collect a request from the client. * Collect a request from the client.
*/ */
static int static enum req_fsm_nxt
http1_wait(struct sess *sp, struct worker *wrk, struct req *req) http1_wait(struct sess *sp, struct worker *wrk, struct req *req)
{ {
int j, tmo; int j, tmo;
...@@ -120,7 +120,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -120,7 +120,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req)
if (hs == HTC_COMPLETE) { if (hs == HTC_COMPLETE) {
/* Got it, run with it */ /* Got it, run with it */
req->t_req = now; req->t_req = now;
return (0); return (REQ_FSM_MORE);
} else if (hs == HTC_ERROR_EOF) { } else if (hs == HTC_ERROR_EOF) {
why = SC_REM_CLOSE; why = SC_REM_CLOSE;
break; break;
...@@ -141,7 +141,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -141,7 +141,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req)
wrk->stats.sess_herd++; wrk->stats.sess_herd++;
SES_ReleaseReq(req); SES_ReleaseReq(req);
WAIT_Enter(sp); WAIT_Enter(sp);
return (1); return (REQ_FSM_DONE);
} }
} else { } else {
/* Working on it */ /* Working on it */
...@@ -158,7 +158,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -158,7 +158,7 @@ http1_wait(struct sess *sp, struct worker *wrk, struct req *req)
SES_ReleaseReq(req); SES_ReleaseReq(req);
assert(why != SC_NULL); assert(why != SC_NULL);
SES_Delete(sp, why, now); SES_Delete(sp, why, now);
return (1); return (REQ_FSM_DONE);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -238,7 +238,7 @@ http1_cleanup(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -238,7 +238,7 @@ http1_cleanup(struct sess *sp, struct worker *wrk, struct req *req)
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
*/ */
static int static enum req_fsm_nxt
http1_dissect(struct worker *wrk, struct req *req) http1_dissect(struct worker *wrk, struct req *req)
{ {
const char *r = "HTTP/1.1 100 Continue\r\n\r\n"; const char *r = "HTTP/1.1 100 Continue\r\n\r\n";
...@@ -266,7 +266,7 @@ http1_dissect(struct worker *wrk, struct req *req) ...@@ -266,7 +266,7 @@ http1_dissect(struct worker *wrk, struct req *req)
if (req->err_code == 400) { if (req->err_code == 400) {
wrk->stats.client_req_400++; wrk->stats.client_req_400++;
SES_Close(req->sp, SC_RX_JUNK); SES_Close(req->sp, SC_RX_JUNK);
return (1); return (REQ_FSM_DONE);
} }
req->acct_req.req++; req->acct_req.req++;
...@@ -280,7 +280,7 @@ http1_dissect(struct worker *wrk, struct req *req) ...@@ -280,7 +280,7 @@ http1_dissect(struct worker *wrk, struct req *req)
req->err_code = 417; req->err_code = 417;
} else if (strlen(r) != write(req->sp->fd, r, strlen(r))) { } else if (strlen(r) != write(req->sp->fd, r, strlen(r))) {
SES_Close(req->sp, SC_REM_CLOSE); SES_Close(req->sp, SC_REM_CLOSE);
return (1); return (REQ_FSM_DONE);
} }
} else if (req->err_code == 413) } else if (req->err_code == 413)
wrk->stats.client_req_413++; wrk->stats.client_req_413++;
...@@ -293,7 +293,7 @@ http1_dissect(struct worker *wrk, struct req *req) ...@@ -293,7 +293,7 @@ http1_dissect(struct worker *wrk, struct req *req)
HTTP_Copy(req->http0, req->http); // For ESI & restart HTTP_Copy(req->http0, req->http); // For ESI & restart
return (0); return (REQ_FSM_MORE);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -302,7 +302,7 @@ http1_dissect(struct worker *wrk, struct req *req) ...@@ -302,7 +302,7 @@ http1_dissect(struct worker *wrk, struct req *req)
void void
HTTP1_Session(struct worker *wrk, struct req *req) HTTP1_Session(struct worker *wrk, struct req *req)
{ {
int done = 0; enum req_fsm_nxt nxt = REQ_FSM_MORE;
struct sess *sp; struct sess *sp;
enum http1_cleanup_ret sdr; enum http1_cleanup_ret sdr;
...@@ -343,12 +343,12 @@ HTTP1_Session(struct worker *wrk, struct req *req) ...@@ -343,12 +343,12 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (sp->sess_step == S_STP_WORKING) { if (sp->sess_step == S_STP_WORKING) {
if (req->req_step == R_STP_RECV) if (req->req_step == R_STP_RECV)
done = http1_dissect(wrk, req); nxt = http1_dissect(wrk, req);
if (done == 0) if (nxt == REQ_FSM_MORE)
done = CNT_Request(wrk, req); nxt = CNT_Request(wrk, req);
if (done == 2) if (nxt == REQ_FSM_DISEMBARK)
return; return;
assert(done == 1); assert(nxt == REQ_FSM_DONE);
sdr = http1_cleanup(sp, wrk, req); sdr = http1_cleanup(sp, wrk, req);
switch (sdr) { switch (sdr) {
case SESS_DONE_RET_GONE: case SESS_DONE_RET_GONE:
...@@ -366,8 +366,8 @@ HTTP1_Session(struct worker *wrk, struct req *req) ...@@ -366,8 +366,8 @@ HTTP1_Session(struct worker *wrk, struct req *req)
} }
if (sp->sess_step == S_STP_NEWREQ) { if (sp->sess_step == S_STP_NEWREQ) {
done = http1_wait(sp, wrk, req); nxt = http1_wait(sp, wrk, req);
if (done) if (nxt != REQ_FSM_MORE)
return; return;
sp->sess_step = S_STP_WORKING; sp->sess_step = S_STP_WORKING;
req->req_step = R_STP_RECV; req->req_step = R_STP_RECV;
......
...@@ -91,7 +91,7 @@ DOT } ...@@ -91,7 +91,7 @@ DOT }
* *
*/ */
static int static enum req_fsm_nxt
cnt_prepresp(struct worker *wrk, struct req *req) cnt_prepresp(struct worker *wrk, struct req *req)
{ {
struct busyobj *bo; struct busyobj *bo;
...@@ -175,12 +175,12 @@ cnt_prepresp(struct worker *wrk, struct req *req) ...@@ -175,12 +175,12 @@ cnt_prepresp(struct worker *wrk, struct req *req)
AZ(req->obj); AZ(req->obj);
http_Teardown(req->resp); http_Teardown(req->resp);
req->req_step = R_STP_RESTART; req->req_step = R_STP_RESTART;
return (0); return (REQ_FSM_MORE);
default: default:
WRONG("Illegal action in vcl_deliver{}"); WRONG("Illegal action in vcl_deliver{}");
} }
req->req_step = R_STP_DELIVER; req->req_step = R_STP_DELIVER;
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -198,7 +198,7 @@ DOT deliver -> DONE [style=bold,color=blue] ...@@ -198,7 +198,7 @@ DOT deliver -> DONE [style=bold,color=blue]
* *
*/ */
static int static enum req_fsm_nxt
cnt_deliver(struct worker *wrk, struct req *req) cnt_deliver(struct worker *wrk, struct req *req)
{ {
struct busyobj *bo; struct busyobj *bo;
...@@ -219,7 +219,7 @@ cnt_deliver(struct worker *wrk, struct req *req) ...@@ -219,7 +219,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
req->err_code = 503; req->err_code = 503;
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
} }
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
} }
...@@ -237,7 +237,7 @@ cnt_deliver(struct worker *wrk, struct req *req) ...@@ -237,7 +237,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
assert(WRW_IsReleased(wrk)); assert(WRW_IsReleased(wrk));
(void)HSH_Deref(&wrk->stats, NULL, &req->obj); (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
http_Teardown(req->resp); http_Teardown(req->resp);
return (1); return (REQ_FSM_DONE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
* Emit an error * Emit an error
...@@ -254,7 +254,7 @@ DOT vcl_error-> rsterr [label="restart",color=purple] ...@@ -254,7 +254,7 @@ DOT vcl_error-> rsterr [label="restart",color=purple]
DOT rsterr [label="RESTART",shape=plaintext] DOT rsterr [label="RESTART",shape=plaintext]
*/ */
static int static enum req_fsm_nxt
cnt_error(struct worker *wrk, struct req *req) cnt_error(struct worker *wrk, struct req *req)
{ {
struct http *h; struct http *h;
...@@ -281,7 +281,7 @@ cnt_error(struct worker *wrk, struct req *req) ...@@ -281,7 +281,7 @@ cnt_error(struct worker *wrk, struct req *req)
req->director = NULL; req->director = NULL;
http_Teardown(bo->beresp); http_Teardown(bo->beresp);
http_Teardown(bo->bereq); http_Teardown(bo->bereq);
return(1); return (REQ_FSM_DONE);
} }
CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
req->obj->vxid = bo->vsl->wid; req->obj->vxid = bo->vsl->wid;
...@@ -309,7 +309,7 @@ cnt_error(struct worker *wrk, struct req *req) ...@@ -309,7 +309,7 @@ cnt_error(struct worker *wrk, struct req *req)
HSH_Drop(wrk, &req->obj); HSH_Drop(wrk, &req->obj);
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
req->req_step = R_STP_RESTART; req->req_step = R_STP_RESTART;
return (0); return (REQ_FSM_MORE);
} else if (req->handling == VCL_RET_RESTART) } else if (req->handling == VCL_RET_RESTART)
req->handling = VCL_RET_DELIVER; req->handling = VCL_RET_DELIVER;
...@@ -324,7 +324,7 @@ cnt_error(struct worker *wrk, struct req *req) ...@@ -324,7 +324,7 @@ cnt_error(struct worker *wrk, struct req *req)
http_Teardown(bo->bereq); http_Teardown(bo->bereq);
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
req->req_step = R_STP_PREPRESP; req->req_step = R_STP_PREPRESP;
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -340,7 +340,7 @@ DOT fetch -> fetchbody [style=bold,color=red] ...@@ -340,7 +340,7 @@ DOT fetch -> fetchbody [style=bold,color=red]
DOT fetch -> fetchbody [style=bold,color=blue] DOT fetch -> fetchbody [style=bold,color=blue]
*/ */
static int static enum req_fsm_nxt
cnt_fetch(struct worker *wrk, struct req *req) cnt_fetch(struct worker *wrk, struct req *req)
{ {
int i, need_host_hdr; int i, need_host_hdr;
...@@ -418,7 +418,7 @@ cnt_fetch(struct worker *wrk, struct req *req) ...@@ -418,7 +418,7 @@ cnt_fetch(struct worker *wrk, struct req *req)
switch (req->handling) { switch (req->handling) {
case VCL_RET_DELIVER: case VCL_RET_DELIVER:
req->req_step = R_STP_FETCHBODY; req->req_step = R_STP_FETCHBODY;
return (0); return (REQ_FSM_MORE);
default: default:
break; break;
} }
...@@ -446,10 +446,10 @@ cnt_fetch(struct worker *wrk, struct req *req) ...@@ -446,10 +446,10 @@ cnt_fetch(struct worker *wrk, struct req *req)
switch (req->handling) { switch (req->handling) {
case VCL_RET_RESTART: case VCL_RET_RESTART:
req->req_step = R_STP_RESTART; req->req_step = R_STP_RESTART;
return (0); return (REQ_FSM_MORE);
case VCL_RET_ERROR: case VCL_RET_ERROR:
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
default: default:
WRONG("Illegal action in vcl_fetch{}"); WRONG("Illegal action in vcl_fetch{}");
} }
...@@ -468,7 +468,7 @@ DOT fetchbody:out -> prepresp [style=bold,color=red] ...@@ -468,7 +468,7 @@ DOT fetchbody:out -> prepresp [style=bold,color=red]
DOT fetchbody:out -> prepresp [style=bold,color=blue] DOT fetchbody:out -> prepresp [style=bold,color=blue]
*/ */
static int static enum req_fsm_nxt
cnt_fetchbody(struct worker *wrk, struct req *req) cnt_fetchbody(struct worker *wrk, struct req *req)
{ {
struct http *hp, *hp2; struct http *hp, *hp2;
...@@ -606,7 +606,7 @@ cnt_fetchbody(struct worker *wrk, struct req *req) ...@@ -606,7 +606,7 @@ cnt_fetchbody(struct worker *wrk, struct req *req)
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
VDI_CloseFd(&bo->vbc); VDI_CloseFd(&bo->vbc);
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
return (0); return (REQ_FSM_MORE);
} }
CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
...@@ -685,12 +685,12 @@ cnt_fetchbody(struct worker *wrk, struct req *req) ...@@ -685,12 +685,12 @@ cnt_fetchbody(struct worker *wrk, struct req *req)
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
req->err_code = 503; req->err_code = 503;
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
} }
assert(WRW_IsReleased(wrk)); assert(WRW_IsReleased(wrk));
req->req_step = R_STP_PREPRESP; req->req_step = R_STP_PREPRESP;
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -711,7 +711,7 @@ DOT hit:pass -> pass [label=pass,style=bold,color=red] ...@@ -711,7 +711,7 @@ DOT hit:pass -> pass [label=pass,style=bold,color=red]
DOT hit:del -> prepresp [label="deliver",style=bold,color=green] DOT hit:del -> prepresp [label="deliver",style=bold,color=green]
*/ */
static int static enum req_fsm_nxt
cnt_hit(struct worker *wrk, struct req *req) cnt_hit(struct worker *wrk, struct req *req)
{ {
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
...@@ -731,7 +731,7 @@ cnt_hit(struct worker *wrk, struct req *req) ...@@ -731,7 +731,7 @@ cnt_hit(struct worker *wrk, struct req *req)
//AZ(req->busyobj->beresp->ws); //AZ(req->busyobj->beresp->ws);
(void)HTTP1_DiscardReqBody(req); // XXX: handle err (void)HTTP1_DiscardReqBody(req); // XXX: handle err
req->req_step = R_STP_PREPRESP; req->req_step = R_STP_PREPRESP;
return (0); return (REQ_FSM_MORE);
} }
/* Drop our object, we won't need it */ /* Drop our object, we won't need it */
...@@ -741,13 +741,13 @@ cnt_hit(struct worker *wrk, struct req *req) ...@@ -741,13 +741,13 @@ cnt_hit(struct worker *wrk, struct req *req)
switch(req->handling) { switch(req->handling) {
case VCL_RET_PASS: case VCL_RET_PASS:
req->req_step = R_STP_PASS; req->req_step = R_STP_PASS;
return (0); return (REQ_FSM_MORE);
case VCL_RET_ERROR: case VCL_RET_ERROR:
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
case VCL_RET_RESTART: case VCL_RET_RESTART:
req->req_step = R_STP_RESTART; req->req_step = R_STP_RESTART;
return (0); return (REQ_FSM_MORE);
default: default:
WRONG("Illegal action in vcl_hit{}"); WRONG("Illegal action in vcl_hit{}");
} }
...@@ -772,7 +772,7 @@ DOT lookup:no -> hit [style=bold,color=green] ...@@ -772,7 +772,7 @@ DOT lookup:no -> hit [style=bold,color=green]
DOT lookup:yes -> pass [style=bold,color=red] DOT lookup:yes -> pass [style=bold,color=red]
*/ */
static int static enum req_fsm_nxt
cnt_lookup(struct worker *wrk, struct req *req) cnt_lookup(struct worker *wrk, struct req *req)
{ {
struct objcore *oc; struct objcore *oc;
...@@ -798,7 +798,7 @@ cnt_lookup(struct worker *wrk, struct req *req) ...@@ -798,7 +798,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
* object has been unbusied, and still have the objhead * object has been unbusied, and still have the objhead
* around to restart the lookup with. * around to restart the lookup with.
*/ */
return (2); return (REQ_FSM_DISEMBARK);
} }
AZ(req->objcore); AZ(req->objcore);
...@@ -820,7 +820,7 @@ cnt_lookup(struct worker *wrk, struct req *req) ...@@ -820,7 +820,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
req->objcore = oc; req->objcore = oc;
req->req_step = R_STP_MISS; req->req_step = R_STP_MISS;
return (0); return (REQ_FSM_MORE);
} }
/* We are not prepared to do streaming yet */ /* We are not prepared to do streaming yet */
...@@ -838,13 +838,13 @@ cnt_lookup(struct worker *wrk, struct req *req) ...@@ -838,13 +838,13 @@ cnt_lookup(struct worker *wrk, struct req *req)
(void)HSH_Deref(&wrk->stats, NULL, &req->obj); (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
AZ(req->objcore); AZ(req->objcore);
req->req_step = R_STP_PASS; req->req_step = R_STP_PASS;
return (0); return (REQ_FSM_MORE);
} }
wrk->stats.cache_hit++; wrk->stats.cache_hit++;
VSLb(req->vsl, SLT_Hit, "%u", req->obj->vxid); VSLb(req->vsl, SLT_Hit, "%u", req->obj->vxid);
req->req_step = R_STP_HIT; req->req_step = R_STP_HIT;
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -861,7 +861,7 @@ DOT miss:pass -> pass [label="pass",style=bold,color=red] ...@@ -861,7 +861,7 @@ DOT miss:pass -> pass [label="pass",style=bold,color=red]
DOT DOT
*/ */
static int static enum req_fsm_nxt
cnt_miss(struct worker *wrk, struct req *req) cnt_miss(struct worker *wrk, struct req *req)
{ {
struct busyobj *bo; struct busyobj *bo;
...@@ -892,7 +892,7 @@ cnt_miss(struct worker *wrk, struct req *req) ...@@ -892,7 +892,7 @@ cnt_miss(struct worker *wrk, struct req *req)
if (req->handling == VCL_RET_FETCH) { if (req->handling == VCL_RET_FETCH) {
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
req->req_step = R_STP_FETCH; req->req_step = R_STP_FETCH;
return (0); return (REQ_FSM_MORE);
} }
AZ(HSH_Deref(&wrk->stats, req->objcore, NULL)); AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
...@@ -913,7 +913,7 @@ cnt_miss(struct worker *wrk, struct req *req) ...@@ -913,7 +913,7 @@ cnt_miss(struct worker *wrk, struct req *req)
default: default:
WRONG("Illegal action in vcl_miss{}"); WRONG("Illegal action in vcl_miss{}");
} }
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -933,7 +933,7 @@ XDOT pass:err -> err_pass [label="error"] ...@@ -933,7 +933,7 @@ XDOT pass:err -> err_pass [label="error"]
XDOT err_pass [label="ERROR",shape=plaintext] XDOT err_pass [label="ERROR",shape=plaintext]
*/ */
static int static enum req_fsm_nxt
cnt_pass(struct worker *wrk, struct req *req) cnt_pass(struct worker *wrk, struct req *req)
{ {
struct busyobj *bo; struct busyobj *bo;
...@@ -957,7 +957,7 @@ cnt_pass(struct worker *wrk, struct req *req) ...@@ -957,7 +957,7 @@ cnt_pass(struct worker *wrk, struct req *req)
http_Teardown(bo->bereq); http_Teardown(bo->bereq);
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
} }
assert(req->handling == VCL_RET_PASS); assert(req->handling == VCL_RET_PASS);
req->acct_req.pass++; req->acct_req.pass++;
...@@ -965,7 +965,7 @@ cnt_pass(struct worker *wrk, struct req *req) ...@@ -965,7 +965,7 @@ cnt_pass(struct worker *wrk, struct req *req)
req->objcore = HSH_NewObjCore(wrk); req->objcore = HSH_NewObjCore(wrk);
req->objcore->busyobj = bo; req->objcore->busyobj = bo;
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -993,7 +993,7 @@ DOT vcl_pipe -> err_pipe [label="error"] ...@@ -993,7 +993,7 @@ DOT vcl_pipe -> err_pipe [label="error"]
DOT err_pipe [label="ERROR",shape=plaintext] DOT err_pipe [label="ERROR",shape=plaintext]
*/ */
static int static enum req_fsm_nxt
cnt_pipe(struct worker *wrk, struct req *req) cnt_pipe(struct worker *wrk, struct req *req)
{ {
struct busyobj *bo; struct busyobj *bo;
...@@ -1019,7 +1019,7 @@ cnt_pipe(struct worker *wrk, struct req *req) ...@@ -1019,7 +1019,7 @@ cnt_pipe(struct worker *wrk, struct req *req)
assert(WRW_IsReleased(wrk)); assert(WRW_IsReleased(wrk));
http_Teardown(bo->bereq); http_Teardown(bo->bereq);
VBO_DerefBusyObj(wrk, &req->busyobj); VBO_DerefBusyObj(wrk, &req->busyobj);
return (1); return (REQ_FSM_DONE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -1036,7 +1036,7 @@ DOT restart -> err_restart ...@@ -1036,7 +1036,7 @@ DOT restart -> err_restart
DOT err_restart [label="ERROR",shape=plaintext] DOT err_restart [label="ERROR",shape=plaintext]
*/ */
static int static enum req_fsm_nxt
cnt_restart(const struct worker *wrk, struct req *req) cnt_restart(const struct worker *wrk, struct req *req)
{ {
...@@ -1051,7 +1051,7 @@ cnt_restart(const struct worker *wrk, struct req *req) ...@@ -1051,7 +1051,7 @@ cnt_restart(const struct worker *wrk, struct req *req)
req->err_code = 0; req->err_code = 0;
req->req_step = R_STP_RECV; req->req_step = R_STP_RECV;
} }
return (0); return (REQ_FSM_MORE);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -1080,7 +1080,7 @@ DOT recv:lookup -> hash [style=bold,color=green] ...@@ -1080,7 +1080,7 @@ DOT recv:lookup -> hash [style=bold,color=green]
DOT hash -> lookup [label="hash",style=bold,color=green] DOT hash -> lookup [label="hash",style=bold,color=green]
*/ */
static int static enum req_fsm_nxt
cnt_recv(const struct worker *wrk, struct req *req) cnt_recv(const struct worker *wrk, struct req *req)
{ {
unsigned recv_handling; unsigned recv_handling;
...@@ -1098,7 +1098,7 @@ cnt_recv(const struct worker *wrk, struct req *req) ...@@ -1098,7 +1098,7 @@ cnt_recv(const struct worker *wrk, struct req *req)
if (req->err_code) { if (req->err_code) {
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
} }
/* By default we use the first backend */ /* By default we use the first backend */
...@@ -1144,21 +1144,21 @@ cnt_recv(const struct worker *wrk, struct req *req) ...@@ -1144,21 +1144,21 @@ cnt_recv(const struct worker *wrk, struct req *req)
switch(recv_handling) { switch(recv_handling) {
case VCL_RET_LOOKUP: case VCL_RET_LOOKUP:
req->req_step = R_STP_LOOKUP; req->req_step = R_STP_LOOKUP;
return (0); return (REQ_FSM_MORE);
case VCL_RET_PIPE: case VCL_RET_PIPE:
if (req->esi_level > 0) { if (req->esi_level > 0) {
/* XXX: VSL something */ /* XXX: VSL something */
INCOMPL(); INCOMPL();
return (1); return (REQ_FSM_DONE);
} }
req->req_step = R_STP_PIPE; req->req_step = R_STP_PIPE;
return (0); return (REQ_FSM_MORE);
case VCL_RET_PASS: case VCL_RET_PASS:
req->req_step = R_STP_PASS; req->req_step = R_STP_PASS;
return (0); return (REQ_FSM_MORE);
case VCL_RET_ERROR: case VCL_RET_ERROR:
req->req_step = R_STP_ERROR; req->req_step = R_STP_ERROR;
return (0); return (REQ_FSM_MORE);
default: default:
WRONG("Illegal action in vcl_recv{}"); WRONG("Illegal action in vcl_recv{}");
} }
...@@ -1182,10 +1182,10 @@ cnt_diag(struct req *req, const char *state) ...@@ -1182,10 +1182,10 @@ cnt_diag(struct req *req, const char *state)
VSL_Flush(req->vsl, 0); VSL_Flush(req->vsl, 0);
} }
int enum req_fsm_nxt
CNT_Request(struct worker *wrk, struct req *req) CNT_Request(struct worker *wrk, struct req *req)
{ {
int done; enum req_fsm_nxt nxt;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
...@@ -1201,7 +1201,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1201,7 +1201,7 @@ CNT_Request(struct worker *wrk, struct req *req)
req->wrk = wrk; req->wrk = wrk;
for (done = 0; !done; ) { for (nxt = REQ_FSM_MORE; nxt == REQ_FSM_MORE; ) {
/* /*
* This is a good place to be paranoid about the various * This is a good place to be paranoid about the various
* pointers still pointing to the things we expect. * pointers still pointing to the things we expect.
...@@ -1223,7 +1223,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1223,7 +1223,7 @@ CNT_Request(struct worker *wrk, struct req *req)
case R_STP_##u: \ case R_STP_##u: \
if (DO_DEBUG(DBG_REQ_STATE)) \ if (DO_DEBUG(DBG_REQ_STATE)) \
cnt_diag(req, #u); \ cnt_diag(req, #u); \
done = cnt_##l arg; \ nxt = cnt_##l arg; \
break; break;
#include "tbl/steps.h" #include "tbl/steps.h"
#undef REQ_STEP #undef REQ_STEP
...@@ -1233,7 +1233,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1233,7 +1233,7 @@ CNT_Request(struct worker *wrk, struct req *req)
WS_Assert(wrk->aws); WS_Assert(wrk->aws);
CHECK_OBJ_ORNULL(wrk->nobjhead, OBJHEAD_MAGIC); CHECK_OBJ_ORNULL(wrk->nobjhead, OBJHEAD_MAGIC);
} }
if (done == 1) { if (nxt == REQ_FSM_DONE) {
/* XXX: Workaround for pipe */ /* XXX: Workaround for pipe */
if (req->sp->fd >= 0) { if (req->sp->fd >= 0) {
VSLb(req->vsl, SLT_Length, "%ju", VSLb(req->vsl, SLT_Length, "%ju",
...@@ -1259,7 +1259,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1259,7 +1259,7 @@ CNT_Request(struct worker *wrk, struct req *req)
req->wrk = NULL; req->wrk = NULL;
assert(WRW_IsReleased(wrk)); assert(WRW_IsReleased(wrk));
return (done); return (nxt);
} }
/* /*
......
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