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
d1bbd0b3
Commit
d1bbd0b3
authored
Mar 18, 2013
by
Martin Blix Grydeland
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Properly clean up resources after STV_NewObject fails before jumping to error.
Fixes: #1284
parent
d770a105
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
1 deletion
+46
-1
cache_req_fsm.c
bin/varnishd/cache/cache_req_fsm.c
+3
-1
r01284.vtc
bin/varnishtest/tests/r01284.vtc
+43
-0
No files found.
bin/varnishd/cache/cache_req_fsm.c
View file @
d1bbd0b3
...
...
@@ -487,6 +487,7 @@ cnt_fetchbody(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
req
->
objcore
,
OBJCORE_MAGIC
);
bo
=
req
->
busyobj
;
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
...
...
@@ -571,7 +572,6 @@ cnt_fetchbody(struct worker *wrk, struct req *req)
/* Create Vary instructions */
if
(
req
->
objcore
->
objhead
!=
NULL
)
{
CHECK_OBJ_NOTNULL
(
req
->
objcore
,
OBJCORE_MAGIC
);
vary
=
VRY_Create
(
req
,
bo
->
beresp
);
if
(
vary
!=
NULL
)
{
varyl
=
VSB_len
(
vary
);
...
...
@@ -610,6 +610,8 @@ cnt_fetchbody(struct worker *wrk, struct req *req)
if
(
req
->
obj
==
NULL
)
{
req
->
err_code
=
503
;
req
->
req_step
=
R_STP_ERROR
;
AZ
(
HSH_Deref
(
&
wrk
->
stats
,
req
->
objcore
,
NULL
));
req
->
objcore
=
NULL
;
VDI_CloseFd
(
&
bo
->
vbc
);
VBO_DerefBusyObj
(
wrk
,
&
req
->
busyobj
);
return
(
REQ_FSM_MORE
);
...
...
bin/varnishtest/tests/r01284.vtc
0 → 100644
View file @
d1bbd0b3
varnishtest "#1284 - Test resource cleanup after STV_NewObject fail in fetch"
server s1 {
rxreq
expect req.url == "/obj1"
txresp -bodylen 1048000
rxreq
expect req.url == "/obj2"
txresp -hdr "Long: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" -hdr "Long2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
} -start
varnish v1 -arg "-p nuke_limit=0" -storage "-sTransient=malloc,1m" -vcl+backend {
sub vcl_fetch {
set beresp.storage = "Transient";
}
} -start
client c1 {
# Fill transient
txreq -url "/obj1"
rxresp
expect resp.status == 200
} -run
varnish v1 -expect SMA.Transient.g_bytes > 1048000
varnish v1 -expect SMA.Transient.g_space < 200
client c1 {
# No space for this object (more than 256 bytes in headers). Don't wait
# for reply as Varnish will not send one due to Transient full.
txreq -url "/obj2"
delay 1
} -run
# Two failures, one for obj2 and two for the attempts at sending error
varnish v1 -expect SMA.Transient.c_fail == 3
client c1 {
# Check that Varnish is still alive
txreq -url "/obj1"
rxresp
expect resp.status == 200
} -run
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