Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
unique-xids
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
unique-xids
Commits
3325c6c7
Commit
3325c6c7
authored
Jun 20, 2012
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eliminate the "sp" argument to the request state engine states.
parent
42780ae2
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
101 deletions
+68
-101
cache_center.c
bin/varnishd/cache/cache_center.c
+55
-88
steps.h
include/tbl/steps.h
+13
-13
No files found.
bin/varnishd/cache/cache_center.c
View file @
3325c6c7
...
...
@@ -409,11 +409,10 @@ DOT }
*/
static
int
cnt_prepresp
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_prepresp
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
bo
=
req
->
busyobj
;
...
...
@@ -476,9 +475,7 @@ cnt_prepresp(struct sess *sp, struct worker *wrk, struct req *req)
HTTP_Setup
(
req
->
resp
,
req
->
ws
,
req
->
vsl
,
HTTP_Resp
);
RES_BuildHttp
(
req
);
assert
(
req
->
sp
==
sp
);
VCL_deliver_method
(
req
);
assert
(
req
->
sp
==
sp
);
switch
(
req
->
handling
)
{
case
VCL_RET_DELIVER
:
break
;
...
...
@@ -494,12 +491,12 @@ cnt_prepresp(struct sess *sp, struct worker *wrk, struct req *req)
}
AZ
(
req
->
obj
);
http_Teardown
(
req
->
resp
);
sp
->
step
=
STP_RESTART
;
req
->
sp
->
step
=
STP_RESTART
;
return
(
0
);
default:
WRONG
(
"Illegal action in vcl_deliver{}"
);
}
sp
->
step
=
STP_DELIVER
;
req
->
sp
->
step
=
STP_DELIVER
;
return
(
0
);
}
...
...
@@ -519,11 +516,10 @@ DOT deliver -> DONE [style=bold,color=blue]
*/
static
int
cnt_deliver
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_deliver
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
obj
,
OBJECT_MAGIC
);
...
...
@@ -539,7 +535,7 @@ cnt_deliver(struct sess *sp, struct worker *wrk, struct req *req)
HSH_Deref
(
&
wrk
->
stats
,
NULL
,
&
req
->
obj
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
req
->
err_code
=
503
;
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
}
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
...
...
@@ -576,13 +572,12 @@ DOT rsterr [label="RESTART",shape=plaintext]
*/
static
int
cnt_error
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_error
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
http
*
h
;
struct
busyobj
*
bo
;
char
date
[
40
];
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
AZ
(
req
->
objcore
);
...
...
@@ -591,7 +586,7 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
bo
=
VBO_GetBusyObj
(
wrk
);
req
->
busyobj
=
bo
;
bo
->
vsl
->
wid
=
sp
->
vsl_id
;
bo
->
vsl
->
wid
=
req
->
sp
->
vsl_id
;
AZ
(
bo
->
stats
);
bo
->
stats
=
&
wrk
->
stats
;
req
->
objcore
=
HSH_NewObjCore
(
wrk
);
...
...
@@ -625,15 +620,13 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
http_PutResponse
(
h
,
req
->
err_reason
);
else
http_PutResponse
(
h
,
http_StatusMessage
(
req
->
err_code
));
assert
(
req
->
sp
==
sp
);
VCL_error_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
req
->
handling
==
VCL_RET_RESTART
&&
req
->
restarts
<
cache_param
->
max_restarts
)
{
HSH_Drop
(
wrk
,
&
req
->
obj
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
sp
->
step
=
STP_RESTART
;
req
->
sp
->
step
=
STP_RESTART
;
return
(
0
);
}
else
if
(
req
->
handling
==
VCL_RET_RESTART
)
req
->
handling
=
VCL_RET_DELIVER
;
...
...
@@ -648,7 +641,7 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
req
->
err_reason
=
NULL
;
http_Teardown
(
bo
->
bereq
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
sp
->
step
=
STP_PREPRESP
;
req
->
sp
->
step
=
STP_PREPRESP
;
return
(
0
);
}
...
...
@@ -666,12 +659,11 @@ DOT fetch -> fetchbody [style=bold,color=blue]
*/
static
int
cnt_fetch
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_fetch
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
int
i
,
need_host_hdr
;
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
...
...
@@ -736,16 +728,14 @@ cnt_fetch(struct sess *sp, struct worker *wrk, struct req *req)
AZ
(
bo
->
do_esi
);
AZ
(
bo
->
do_pass
);
assert
(
req
->
sp
==
sp
);
VCL_fetch_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
bo
->
do_pass
)
req
->
objcore
->
flags
|=
OC_F_PASS
;
switch
(
req
->
handling
)
{
case
VCL_RET_DELIVER
:
sp
->
step
=
STP_FETCHBODY
;
req
->
sp
->
step
=
STP_FETCHBODY
;
return
(
0
);
default:
break
;
...
...
@@ -771,10 +761,10 @@ cnt_fetch(struct sess *sp, struct worker *wrk, struct req *req)
switch
(
req
->
handling
)
{
case
VCL_RET_RESTART
:
sp
->
step
=
STP_RESTART
;
req
->
sp
->
step
=
STP_RESTART
;
return
(
0
);
case
VCL_RET_ERROR
:
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
default:
WRONG
(
"Illegal action in vcl_fetch{}"
);
...
...
@@ -795,7 +785,7 @@ DOT fetchbody:out -> prepresp [style=bold,color=blue]
*/
static
int
cnt_fetchbody
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_fetchbody
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
http
*
hp
,
*
hp2
;
char
*
b
;
...
...
@@ -805,7 +795,6 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
int
varyl
=
0
,
pass
;
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
bo
=
req
->
busyobj
;
...
...
@@ -930,7 +919,7 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
bo
->
stats
=
NULL
;
if
(
req
->
obj
==
NULL
)
{
req
->
err_code
=
503
;
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
VDI_CloseFd
(
&
bo
->
vbc
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
return
(
0
);
...
...
@@ -1011,12 +1000,12 @@ cnt_fetchbody(struct sess *sp, struct worker *wrk, struct req *req)
HSH_Deref
(
&
wrk
->
stats
,
NULL
,
&
req
->
obj
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
req
->
err_code
=
503
;
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
}
assert
(
WRW_IsReleased
(
wrk
));
sp
->
step
=
STP_PREPRESP
;
req
->
sp
->
step
=
STP_PREPRESP
;
return
(
0
);
}
...
...
@@ -1039,9 +1028,8 @@ DOT hit:del -> prepresp [label="deliver",style=bold,color=green]
*/
static
int
cnt_hit
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_hit
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
...
...
@@ -1052,15 +1040,13 @@ cnt_hit(struct sess *sp, struct worker *wrk, struct req *req)
assert
(
!
(
req
->
obj
->
objcore
->
flags
&
OC_F_PASS
));
assert
(
req
->
sp
==
sp
);
VCL_hit_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
req
->
handling
==
VCL_RET_DELIVER
)
{
//AZ(req->busyobj->bereq->ws);
//AZ(req->busyobj->beresp->ws);
(
void
)
FetchReqBody
(
req
,
0
);
sp
->
step
=
STP_PREPRESP
;
req
->
sp
->
step
=
STP_PREPRESP
;
return
(
0
);
}
...
...
@@ -1070,13 +1056,13 @@ cnt_hit(struct sess *sp, struct worker *wrk, struct req *req)
switch
(
req
->
handling
)
{
case
VCL_RET_PASS
:
sp
->
step
=
STP_PASS
;
req
->
sp
->
step
=
STP_PASS
;
return
(
0
);
case
VCL_RET_ERROR
:
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
case
VCL_RET_RESTART
:
sp
->
step
=
STP_RESTART
;
req
->
sp
->
step
=
STP_RESTART
;
return
(
0
);
default:
WRONG
(
"Illegal action in vcl_hit{}"
);
...
...
@@ -1103,13 +1089,12 @@ DOT lookup:yes -> pass [style=bold,color=red]
*/
static
int
cnt_lookup
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_lookup
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
objcore
*
oc
;
struct
object
*
o
;
struct
objhead
*
oh
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
AZ
(
req
->
objcore
);
...
...
@@ -1127,7 +1112,6 @@ cnt_lookup(struct sess *sp, struct worker *wrk, struct req *req)
* worker thread. We return to STP_LOOKUP when the busy
* object has been unbusied, and still have the hash digest
* around to do the lookup with.
* NB: Do not access sp any more !
*/
return
(
2
);
}
...
...
@@ -1156,7 +1140,7 @@ cnt_lookup(struct sess *sp, struct worker *wrk, struct req *req)
req
->
vary_e
=
NULL
;
req
->
objcore
=
oc
;
sp
->
step
=
STP_MISS
;
req
->
sp
->
step
=
STP_MISS
;
return
(
0
);
}
...
...
@@ -1177,13 +1161,13 @@ cnt_lookup(struct sess *sp, struct worker *wrk, struct req *req)
VSLb
(
req
->
vsl
,
SLT_HitPass
,
"%u"
,
req
->
obj
->
xid
);
(
void
)
HSH_Deref
(
&
wrk
->
stats
,
NULL
,
&
req
->
obj
);
AZ
(
req
->
objcore
);
sp
->
step
=
STP_PASS
;
req
->
sp
->
step
=
STP_PASS
;
return
(
0
);
}
wrk
->
stats
.
cache_hit
++
;
VSLb
(
req
->
vsl
,
SLT_Hit
,
"%u"
,
req
->
obj
->
xid
);
sp
->
step
=
STP_HIT
;
req
->
sp
->
step
=
STP_HIT
;
return
(
0
);
}
...
...
@@ -1202,11 +1186,10 @@ DOT
*/
static
int
cnt_miss
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_miss
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
vcl
,
VCL_CONF_MAGIC
);
...
...
@@ -1228,13 +1211,11 @@ cnt_miss(struct sess *sp, struct worker *wrk, struct req *req)
http_SetHeader
(
bo
->
bereq
,
"Accept-Encoding: gzip"
);
}
assert
(
req
->
sp
==
sp
);
VCL_miss_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
req
->
handling
==
VCL_RET_FETCH
)
{
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
sp
->
step
=
STP_FETCH
;
req
->
sp
->
step
=
STP_FETCH
;
return
(
0
);
}
...
...
@@ -1245,13 +1226,13 @@ cnt_miss(struct sess *sp, struct worker *wrk, struct req *req)
switch
(
req
->
handling
)
{
case
VCL_RET_ERROR
:
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
break
;
case
VCL_RET_PASS
:
sp
->
step
=
STP_PASS
;
req
->
sp
->
step
=
STP_PASS
;
break
;
case
VCL_RET_RESTART
:
sp
->
step
=
STP_RESTART
;
req
->
sp
->
step
=
STP_RESTART
;
break
;
default:
WRONG
(
"Illegal action in vcl_miss{}"
);
...
...
@@ -1277,11 +1258,10 @@ XDOT err_pass [label="ERROR",shape=plaintext]
*/
static
int
cnt_pass
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_pass
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
vcl
,
VCL_CONF_MAGIC
);
...
...
@@ -1291,24 +1271,22 @@ cnt_pass(struct sess *sp, struct worker *wrk, struct req *req)
req
->
busyobj
=
VBO_GetBusyObj
(
wrk
);
bo
=
req
->
busyobj
;
bo
->
vsl
->
wid
=
sp
->
vsl_id
;
bo
->
vsl
->
wid
=
req
->
sp
->
vsl_id
;
bo
->
refcount
=
2
;
HTTP_Setup
(
bo
->
bereq
,
bo
->
ws
,
bo
->
vsl
,
HTTP_Bereq
);
http_FilterReq
(
req
,
HTTPH_R_PASS
);
assert
(
req
->
sp
==
sp
);
VCL_pass_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
req
->
handling
==
VCL_RET_ERROR
)
{
http_Teardown
(
bo
->
bereq
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
}
assert
(
req
->
handling
==
VCL_RET_PASS
);
wrk
->
acct_tmp
.
pass
++
;
sp
->
step
=
STP_FETCH
;
req
->
sp
->
step
=
STP_FETCH
;
req
->
objcore
=
HSH_NewObjCore
(
wrk
);
req
->
objcore
->
busyobj
=
bo
;
...
...
@@ -1341,11 +1319,10 @@ DOT err_pipe [label="ERROR",shape=plaintext]
*/
static
int
cnt_pipe
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_pipe
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
struct
busyobj
*
bo
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
vcl
,
VCL_CONF_MAGIC
);
...
...
@@ -1354,13 +1331,11 @@ cnt_pipe(struct sess *sp, struct worker *wrk, struct req *req)
wrk
->
acct_tmp
.
pipe
++
;
req
->
busyobj
=
VBO_GetBusyObj
(
wrk
);
bo
=
req
->
busyobj
;
bo
->
vsl
->
wid
=
sp
->
vsl_id
;
bo
->
vsl
->
wid
=
req
->
sp
->
vsl_id
;
HTTP_Setup
(
bo
->
bereq
,
bo
->
ws
,
bo
->
vsl
,
HTTP_Bereq
);
http_FilterReq
(
req
,
0
);
assert
(
req
->
sp
==
sp
);
VCL_pipe_method
(
req
);
assert
(
req
->
sp
==
sp
);
if
(
req
->
handling
==
VCL_RET_ERROR
)
INCOMPL
();
...
...
@@ -1386,20 +1361,19 @@ DOT restart -> recv [color=purple]
*/
static
int
cnt_restart
(
struct
sess
*
sp
,
const
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_restart
(
const
struct
worker
*
wrk
,
struct
req
*
req
)
{
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
req
->
director
=
NULL
;
if
(
++
req
->
restarts
>=
cache_param
->
max_restarts
)
{
req
->
err_code
=
503
;
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
}
else
{
req
->
err_code
=
0
;
sp
->
step
=
STP_RECV
;
req
->
sp
->
step
=
STP_RECV
;
}
return
(
0
);
}
...
...
@@ -1433,12 +1407,11 @@ DOT hash -> lookup [label="hash",style=bold,color=green]
*/
static
int
cnt_recv
(
struct
sess
*
sp
,
const
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_recv
(
const
struct
worker
*
wrk
,
struct
req
*
req
)
{
unsigned
recv_handling
;
struct
SHA256Context
sha256ctx
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
vcl
,
VCL_CONF_MAGIC
);
...
...
@@ -1457,9 +1430,7 @@ cnt_recv(struct sess *sp, const struct worker *wrk, struct req *req)
http_CollectHdr
(
req
->
http
,
H_Cache_Control
);
assert
(
req
->
sp
==
sp
);
VCL_recv_method
(
req
);
assert
(
req
->
sp
==
sp
);
recv_handling
=
req
->
handling
;
if
(
cache_param
->
http_gzip_support
&&
...
...
@@ -1475,9 +1446,7 @@ cnt_recv(struct sess *sp, const struct worker *wrk, struct req *req)
req
->
sha256ctx
=
&
sha256ctx
;
/* so HSH_AddString() can find it */
SHA256_Init
(
req
->
sha256ctx
);
assert
(
req
->
sp
==
sp
);
VCL_hash_method
(
req
);
assert
(
req
->
sp
==
sp
);
assert
(
req
->
handling
==
VCL_RET_HASH
);
SHA256_Final
(
req
->
digest
,
req
->
sha256ctx
);
req
->
sha256ctx
=
NULL
;
...
...
@@ -1489,7 +1458,7 @@ cnt_recv(struct sess *sp, const struct worker *wrk, struct req *req)
switch
(
recv_handling
)
{
case
VCL_RET_LOOKUP
:
sp
->
step
=
STP_LOOKUP
;
req
->
sp
->
step
=
STP_LOOKUP
;
return
(
0
);
case
VCL_RET_PIPE
:
if
(
req
->
esi_level
>
0
)
{
...
...
@@ -1497,13 +1466,13 @@ cnt_recv(struct sess *sp, const struct worker *wrk, struct req *req)
INCOMPL
();
return
(
1
);
}
sp
->
step
=
STP_PIPE
;
req
->
sp
->
step
=
STP_PIPE
;
return
(
0
);
case
VCL_RET_PASS
:
sp
->
step
=
STP_PASS
;
req
->
sp
->
step
=
STP_PASS
;
return
(
0
);
case
VCL_RET_ERROR
:
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
return
(
0
);
default:
WRONG
(
"Illegal action in vcl_recv{}"
);
...
...
@@ -1523,12 +1492,11 @@ DOT start -> DONE [label=errors]
*/
static
int
cnt_start
(
struct
sess
*
sp
,
struct
worker
*
wrk
,
struct
req
*
req
)
cnt_start
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
char
*
p
;
const
char
*
r
=
"HTTP/1.1 100 Continue
\r\n\r\n
"
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
AZ
(
req
->
restarts
);
...
...
@@ -1536,7 +1504,6 @@ cnt_start(struct sess *sp, struct worker *wrk, struct req *req)
AZ
(
req
->
vcl
);
AZ
(
req
->
esi_level
);
assert
(
!
isnan
(
req
->
t_req
));
assert
(
req
->
sp
==
sp
);
/* Update stats of various sorts */
wrk
->
stats
.
client_req
++
;
...
...
@@ -1545,7 +1512,7 @@ cnt_start(struct sess *sp, struct worker *wrk, struct req *req)
/* Assign XID and log */
req
->
xid
=
++
xids
;
/* XXX not locked */
VSLb
(
req
->
vsl
,
SLT_ReqStart
,
"%s %s %u"
,
sp
->
addr
,
sp
->
port
,
req
->
xid
);
req
->
sp
->
addr
,
req
->
sp
->
port
,
req
->
xid
);
/* Borrow VCL reference from worker thread */
VCL_Refresh
(
&
wrk
->
vcl
);
...
...
@@ -1559,7 +1526,7 @@ cnt_start(struct sess *sp, struct worker *wrk, struct req *req)
/* If we could not even parse the request, just close */
if
(
req
->
err_code
==
400
)
{
SES_Close
(
sp
,
"junk"
);
SES_Close
(
req
->
sp
,
"junk"
);
return
(
1
);
}
...
...
@@ -1574,8 +1541,8 @@ cnt_start(struct sess *sp, struct worker *wrk, struct req *req)
if
(
req
->
err_code
==
0
&&
http_GetHdr
(
req
->
http
,
H_Expect
,
&
p
))
{
if
(
strcasecmp
(
p
,
"100-continue"
))
{
req
->
err_code
=
417
;
}
else
if
(
strlen
(
r
)
!=
write
(
sp
->
fd
,
r
,
strlen
(
r
)))
{
SES_Close
(
sp
,
"remote closed"
);
}
else
if
(
strlen
(
r
)
!=
write
(
req
->
sp
->
fd
,
r
,
strlen
(
r
)))
{
SES_Close
(
req
->
sp
,
"remote closed"
);
return
(
1
);
}
}
...
...
@@ -1587,9 +1554,9 @@ cnt_start(struct sess *sp, struct worker *wrk, struct req *req)
HTTP_Copy
(
req
->
http0
,
req
->
http
);
/* Copy for restart/ESI use */
if
(
req
->
err_code
)
sp
->
step
=
STP_ERROR
;
req
->
sp
->
step
=
STP_ERROR
;
else
sp
->
step
=
STP_RECV
;
req
->
sp
->
step
=
STP_RECV
;
return
(
0
);
}
...
...
include/tbl/steps.h
View file @
3325c6c7
...
...
@@ -30,17 +30,17 @@
/*lint -save -e525 -e539 */
SESS_STEP
(
wait
,
WAIT
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
restart
,
RESTART
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
recv
,
RECV
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
start
,
START
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
pipe
,
PIPE
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
pass
,
PASS
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
lookup
,
LOOKUP
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
miss
,
MISS
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
hit
,
HIT
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
fetch
,
FETCH
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
fetchbody
,
FETCHBODY
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
prepresp
,
PREPRESP
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
deliver
,
DELIVER
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
error
,
ERROR
,
(
sp
,
sp
->
wrk
,
sp
->
req
))
SESS_STEP
(
restart
,
RESTART
,
(
wrk
,
req
))
SESS_STEP
(
recv
,
RECV
,
(
wrk
,
req
))
SESS_STEP
(
start
,
START
,
(
wrk
,
req
))
SESS_STEP
(
pipe
,
PIPE
,
(
wrk
,
req
))
SESS_STEP
(
pass
,
PASS
,
(
wrk
,
req
))
SESS_STEP
(
lookup
,
LOOKUP
,
(
wrk
,
req
))
SESS_STEP
(
miss
,
MISS
,
(
wrk
,
req
))
SESS_STEP
(
hit
,
HIT
,
(
wrk
,
req
))
SESS_STEP
(
fetch
,
FETCH
,
(
wrk
,
req
))
SESS_STEP
(
fetchbody
,
FETCHBODY
,
(
wrk
,
req
))
SESS_STEP
(
prepresp
,
PREPRESP
,
(
wrk
,
req
))
SESS_STEP
(
deliver
,
DELIVER
,
(
wrk
,
req
))
SESS_STEP
(
error
,
ERROR
,
(
wrk
,
req
))
/*lint -restore */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment