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
5894995f
Commit
5894995f
authored
Jun 25, 2012
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Always allocate a request before calling CNT_Session()
parent
87f32cb7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
36 additions
and
27 deletions
+36
-27
cache.h
bin/varnishd/cache/cache.h
+1
-1
cache_center.c
bin/varnishd/cache/cache_center.c
+17
-16
cache_session.c
bin/varnishd/cache/cache_session.c
+18
-10
No files found.
bin/varnishd/cache/cache.h
View file @
5894995f
...
@@ -744,7 +744,7 @@ void VBO_Free(struct busyobj **vbo);
...
@@ -744,7 +744,7 @@ void VBO_Free(struct busyobj **vbo);
/* cache_center.c [CNT] */
/* cache_center.c [CNT] */
int
CNT_Request
(
struct
worker
*
,
struct
req
*
);
int
CNT_Request
(
struct
worker
*
,
struct
req
*
);
void
CNT_Session
(
struct
worker
*
,
struct
sess
*
);
void
CNT_Session
(
struct
worker
*
,
struct
req
*
);
void
CNT_Init
(
void
);
void
CNT_Init
(
void
);
/* cache_cli.c [CLI] */
/* cache_cli.c [CLI] */
...
...
bin/varnishd/cache/cache_center.c
View file @
5894995f
...
@@ -117,11 +117,8 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
...
@@ -117,11 +117,8 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
if
(
req
==
NULL
)
{
req
=
SES_GetReq
(
sp
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
}
assert
(
req
->
sp
==
sp
);
assert
(
req
->
sp
==
sp
);
if
(
!
sp
->
init_done
)
{
if
(
!
sp
->
init_done
)
{
...
@@ -327,13 +324,17 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
...
@@ -327,13 +324,17 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
*/
*/
void
void
CNT_Session
(
struct
worker
*
wrk
,
struct
sess
*
sp
)
CNT_Session
(
struct
worker
*
wrk
,
struct
req
*
req
)
{
{
int
done
;
int
done
;
struct
sess
*
sp
;
enum
cnt_sess_done_ret
sdr
;
enum
cnt_sess_done_ret
sdr
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
sp
=
req
->
sp
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
assert
(
sp
->
req
==
req
);
/*
/*
* Whenever we come in from the acceptor or waiter, we need to set
* Whenever we come in from the acceptor or waiter, we need to set
...
@@ -348,7 +349,7 @@ CNT_Session(struct worker *wrk, struct sess *sp)
...
@@ -348,7 +349,7 @@ CNT_Session(struct worker *wrk, struct sess *sp)
SES_Close
(
sp
,
"remote closed"
);
SES_Close
(
sp
,
"remote closed"
);
else
else
SES_Close
(
sp
,
"error"
);
SES_Close
(
sp
,
"error"
);
sdr
=
cnt_sess_done
(
sp
,
wrk
,
sp
->
req
);
sdr
=
cnt_sess_done
(
sp
,
wrk
,
req
);
assert
(
sdr
==
SESS_DONE_RET_GONE
);
assert
(
sdr
==
SESS_DONE_RET_GONE
);
return
;
return
;
}
}
...
@@ -357,18 +358,19 @@ CNT_Session(struct worker *wrk, struct sess *sp)
...
@@ -357,18 +358,19 @@ CNT_Session(struct worker *wrk, struct sess *sp)
/*
/*
* Possible entrance states
* Possible entrance states
*/
*/
assert
(
sp
->
req
==
req
);
assert
(
assert
(
sp
->
sess_step
==
S_STP_NEWREQ
||
sp
->
sess_step
==
S_STP_NEWREQ
||
(
sp
->
req
!=
NULL
&&
req
->
req_step
==
R_STP_LOOKUP
||
(
sp
->
req
->
req_step
==
R_STP_LOOKUP
||
req
->
req_step
==
R_STP_START
);
sp
->
req
->
req_step
==
R_STP_START
)));
if
(
sp
->
sess_step
==
S_STP_WORKING
)
{
if
(
sp
->
sess_step
==
S_STP_WORKING
)
{
done
=
CNT_Request
(
wrk
,
sp
->
req
);
done
=
CNT_Request
(
wrk
,
req
);
if
(
done
==
2
)
if
(
done
==
2
)
return
;
return
;
assert
(
done
==
1
);
assert
(
done
==
1
);
sdr
=
cnt_sess_done
(
sp
,
wrk
,
sp
->
req
);
sdr
=
cnt_sess_done
(
sp
,
wrk
,
req
);
switch
(
sdr
)
{
switch
(
sdr
)
{
case
SESS_DONE_RET_GONE
:
case
SESS_DONE_RET_GONE
:
return
;
return
;
...
@@ -377,7 +379,7 @@ CNT_Session(struct worker *wrk, struct sess *sp)
...
@@ -377,7 +379,7 @@ CNT_Session(struct worker *wrk, struct sess *sp)
break
;
break
;
case
SESS_DONE_RET_START
:
case
SESS_DONE_RET_START
:
sp
->
sess_step
=
S_STP_WORKING
;
sp
->
sess_step
=
S_STP_WORKING
;
sp
->
req
->
req_step
=
R_STP_START
;
req
->
req_step
=
R_STP_START
;
break
;
break
;
default:
default:
WRONG
(
"Illegal enum cnt_sess_done_ret"
);
WRONG
(
"Illegal enum cnt_sess_done_ret"
);
...
@@ -385,12 +387,11 @@ CNT_Session(struct worker *wrk, struct sess *sp)
...
@@ -385,12 +387,11 @@ CNT_Session(struct worker *wrk, struct sess *sp)
}
}
if
(
sp
->
sess_step
==
S_STP_NEWREQ
)
{
if
(
sp
->
sess_step
==
S_STP_NEWREQ
)
{
done
=
cnt_wait
(
sp
,
wrk
,
sp
->
req
);
done
=
cnt_wait
(
sp
,
wrk
,
req
);
if
(
done
)
{
if
(
done
)
return
;
return
;
}
sp
->
sess_step
=
S_STP_WORKING
;
sp
->
sess_step
=
S_STP_WORKING
;
sp
->
req
->
req_step
=
R_STP_START
;
req
->
req_step
=
R_STP_START
;
}
}
}
}
}
}
...
...
bin/varnishd/cache/cache_session.c
View file @
5894995f
...
@@ -124,16 +124,18 @@ ses_new(struct sesspool *pp)
...
@@ -124,16 +124,18 @@ ses_new(struct sesspool *pp)
static
void
static
void
ses_pool_task
(
struct
worker
*
wrk
,
void
*
arg
)
ses_pool_task
(
struct
worker
*
wrk
,
void
*
arg
)
{
{
struct
req
*
req
;
struct
sess
*
sp
;
struct
sess
*
sp
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CAST_OBJ_NOTNULL
(
sp
,
arg
,
SESS_MAGIC
);
CAST_OBJ_NOTNULL
(
req
,
arg
,
REQ_MAGIC
);
sp
=
req
->
sp
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
AZ
(
wrk
->
aws
->
r
);
AZ
(
wrk
->
aws
->
r
);
wrk
->
lastused
=
NAN
;
wrk
->
lastused
=
NAN
;
THR_SetSession
(
sp
);
THR_SetSession
(
sp
);
CNT_Session
(
wrk
,
sp
);
CNT_Session
(
wrk
,
req
);
sp
=
NULL
;
/* Cannot access sp any longer */
THR_SetSession
(
NULL
);
THR_SetSession
(
NULL
);
WS_Assert
(
wrk
->
aws
);
WS_Assert
(
wrk
->
aws
);
AZ
(
wrk
->
wrw
);
AZ
(
wrk
->
wrw
);
...
@@ -151,6 +153,7 @@ void
...
@@ -151,6 +153,7 @@ void
SES_pool_accept_task
(
struct
worker
*
wrk
,
void
*
arg
)
SES_pool_accept_task
(
struct
worker
*
wrk
,
void
*
arg
)
{
{
struct
sesspool
*
pp
;
struct
sesspool
*
pp
;
struct
req
*
req
;
struct
sess
*
sp
;
struct
sess
*
sp
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
...
@@ -161,11 +164,13 @@ SES_pool_accept_task(struct worker *wrk, void *arg)
...
@@ -161,11 +164,13 @@ SES_pool_accept_task(struct worker *wrk, void *arg)
sp
=
ses_new
(
pp
);
sp
=
ses_new
(
pp
);
if
(
sp
==
NULL
)
{
if
(
sp
==
NULL
)
{
VCA_FailSess
(
wrk
);
VCA_FailSess
(
wrk
);
}
else
{
return
;
VCA_SetupSess
(
wrk
,
sp
);
}
sp
->
sess_step
=
S_STP_NEWREQ
;
VCA_SetupSess
(
wrk
,
sp
);
ses_pool_task
(
wrk
,
sp
);
sp
->
sess_step
=
S_STP_NEWREQ
;
}
req
=
SES_GetReq
(
sp
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
ses_pool_task
(
wrk
,
req
);
}
}
/*--------------------------------------------------------------------
/*--------------------------------------------------------------------
...
@@ -186,7 +191,7 @@ SES_ScheduleReq(struct req *req)
...
@@ -186,7 +191,7 @@ SES_ScheduleReq(struct req *req)
AN
(
pp
->
pool
);
AN
(
pp
->
pool
);
sp
->
task
.
func
=
ses_pool_task
;
sp
->
task
.
func
=
ses_pool_task
;
sp
->
task
.
priv
=
sp
;
sp
->
task
.
priv
=
req
;
if
(
Pool_Task
(
pp
->
pool
,
&
sp
->
task
,
POOL_QUEUE_FRONT
))
{
if
(
Pool_Task
(
pp
->
pool
,
&
sp
->
task
,
POOL_QUEUE_FRONT
))
{
VSC_C_main
->
client_drop_late
++
;
VSC_C_main
->
client_drop_late
++
;
...
@@ -206,6 +211,7 @@ SES_ScheduleReq(struct req *req)
...
@@ -206,6 +211,7 @@ SES_ScheduleReq(struct req *req)
void
void
SES_Handle
(
struct
sess
*
sp
,
double
now
)
SES_Handle
(
struct
sess
*
sp
,
double
now
)
{
{
struct
req
*
req
;
struct
sesspool
*
pp
;
struct
sesspool
*
pp
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
...
@@ -213,8 +219,10 @@ SES_Handle(struct sess *sp, double now)
...
@@ -213,8 +219,10 @@ SES_Handle(struct sess *sp, double now)
CHECK_OBJ_NOTNULL
(
pp
,
SESSPOOL_MAGIC
);
CHECK_OBJ_NOTNULL
(
pp
,
SESSPOOL_MAGIC
);
AN
(
pp
->
pool
);
AN
(
pp
->
pool
);
AZ
(
sp
->
req
);
AZ
(
sp
->
req
);
req
=
SES_GetReq
(
sp
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
sp
->
task
.
func
=
ses_pool_task
;
sp
->
task
.
func
=
ses_pool_task
;
sp
->
task
.
priv
=
sp
;
sp
->
task
.
priv
=
req
;
sp
->
sess_step
=
S_STP_NEWREQ
;
sp
->
sess_step
=
S_STP_NEWREQ
;
sp
->
t_rx
=
now
;
sp
->
t_rx
=
now
;
if
(
Pool_Task
(
pp
->
pool
,
&
sp
->
task
,
POOL_QUEUE_FRONT
))
{
if
(
Pool_Task
(
pp
->
pool
,
&
sp
->
task
,
POOL_QUEUE_FRONT
))
{
...
...
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