Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libvmod-file
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
libvmod-file
Commits
33f3bd64
Commit
33f3bd64
authored
Oct 17, 2024
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix a resource leak in object finalization -- timers were never deleted.
parent
1e5a4313
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
15 additions
and
9 deletions
+15
-9
vmod_file.c
src/vmod_file.c
+8
-5
get.vtc
src/vtc/get.vtc
+7
-4
No files found.
src/vmod_file.c
View file @
33f3bd64
...
...
@@ -94,8 +94,9 @@ struct file_info {
#define RDR_ERROR (1 << 1)
#define RDR_MAPPED (1 << 2)
#define RDR_TIMER_INIT (1 << 3)
#define RDR_DELETED (1 << 4)
#define RDR_WARMUP (1 << 5)
#define RDR_TIMER_ON (1 << 4)
#define RDR_DELETED (1 << 5)
#define RDR_WARMUP (1 << 6)
struct
VPFX
(
file_reader
)
{
unsigned
magic
;
...
...
@@ -473,6 +474,7 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp,
return
;
}
rdr
->
timerid
=
timerid
;
rdr
->
flags
|=
RDR_TIMER_INIT
;
timerspec
.
it_value
.
tv_sec
=
0
;
timerspec
.
it_value
.
tv_nsec
=
1
;
...
...
@@ -504,7 +506,7 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp,
VAS_errtxt
(
errno
));
return
;
}
rdr
->
flags
|=
RDR_TIMER_
INIT
;
rdr
->
flags
|=
RDR_TIMER_
ON
;
do
{
VTIM_sleep
(
INIT_SLEEP_INTERVAL
);
}
while
((
rdr
->
flags
&
(
RDR_INITIALIZED
|
RDR_ERROR
))
==
0
);
...
...
@@ -865,7 +867,7 @@ VPFX(event)(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
AN
(
rdr
->
obj_name
);
AN
(
rdr
->
errbuf
);
if
(
rdr
->
flags
&
RDR_TIMER_
INIT
)
if
(
rdr
->
flags
&
RDR_TIMER_
ON
)
continue
;
rdr
->
flags
|=
RDR_WARMUP
;
...
...
@@ -899,6 +901,7 @@ VPFX(event)(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
flags
=
rdr
->
flags
;
AZ
(
pthread_rwlock_unlock
(
rdr
->
lock
));
}
while
(
flags
&
RDR_WARMUP
);
rdr
->
flags
|=
RDR_TIMER_ON
;
if
(
rdr
->
flags
&
RDR_ERROR
)
{
AN
(
strcmp
(
rdr
->
errbuf
,
NO_ERR
));
...
...
@@ -941,7 +944,7 @@ VPFX(event)(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
VAS_errtxt
(
errno
));
continue
;
}
rdr
->
flags
&=
~
RDR_TIMER_
INIT
;
rdr
->
flags
&=
~
RDR_TIMER_
ON
;
VSL
(
SLT_Debug
,
NO_VXID
,
"vmod file: %s.%s: timer suspended"
,
rdr
->
vcl_name
,
rdr
->
obj_name
);
...
...
src/vtc/get.vtc
View file @
33f3bd64
...
...
@@ -4,7 +4,9 @@ varnishtest "reader constructor and .get()"
shell {echo -n "foo bar baz quux" > ${tmpdir}/file}
varnish v1 -vcl {
# Debug param vclrel causes VCLs to be released without delay, making
# it possible to check the effects of VCL discard and object finalization.
varnish v1 -arg "-p debug=+vclrel" -vcl {
import file;
backend b None;
...
...
@@ -51,6 +53,10 @@ varnish v1 -vcl {
client c1 -run
# Tests object finalization.
varnish v1 -cliok "vcl.discard vcl1"
varnish v1 -cli "vcl.list"
varnish v1 -vcl {
import file;
backend b None;
...
...
@@ -213,6 +219,3 @@ varnish v1 -errvcl {vmod file failure: new rdr: ttl -1.000 must be >= 0s} {
new rdr = file.reader("foo", ttl=-1s);
}
}
varnish v1 -cliok "vcl.discard vcl1"
varnish v1 -cli "vcl.list"
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