Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
44108468
Commit
44108468
authored
Feb 26, 2016
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Centralize objcore and boc create/destroy.
Rename ObjStable() to ObjBocDone() which is more precise.
parent
29313f17
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
80 additions
and
37 deletions
+80
-37
cache.h
bin/varnishd/cache/cache.h
+2
-1
cache_hash.c
bin/varnishd/cache/cache_hash.c
+8
-19
cache_obj.c
bin/varnishd/cache/cache_obj.c
+64
-11
cache_obj.h
bin/varnishd/cache/cache_obj.h
+2
-2
storage_simple.c
bin/varnishd/storage/storage_simple.c
+4
-4
No files found.
bin/varnishd/cache/cache.h
View file @
44108468
...
...
@@ -859,6 +859,7 @@ void MPL_Free(struct mempool *mpl, void *item);
/* cache_obj.c */
struct
objcore
*
ObjNew
(
struct
worker
*
);
void
ObjDestroy
(
struct
worker
*
,
struct
objcore
**
);
typedef
int
objiterate_f
(
void
*
priv
,
int
flush
,
const
void
*
ptr
,
ssize_t
len
);
int
ObjIterate
(
struct
worker
*
,
struct
objcore
*
,
void
*
priv
,
objiterate_f
*
func
);
...
...
@@ -882,7 +883,7 @@ void *ObjSetAttr(struct worker *, struct objcore *, enum obj_attr,
ssize_t
len
,
const
void
*
);
int
ObjCopyAttr
(
struct
worker
*
,
struct
objcore
*
,
struct
objcore
*
,
enum
obj_attr
attr
);
void
Obj
Stable
(
struct
worker
*
,
struct
objcore
*
,
struct
boc
*
);
void
Obj
BocDone
(
struct
worker
*
,
struct
objcore
*
,
struct
boc
*
*
);
int
ObjSetDouble
(
struct
worker
*
,
struct
objcore
*
,
enum
obj_attr
,
double
);
int
ObjSetU32
(
struct
worker
*
,
struct
objcore
*
,
enum
obj_attr
,
uint32_t
);
...
...
bin/varnishd/cache/cache_hash.c
View file @
44108468
...
...
@@ -91,10 +91,8 @@ hsh_prealloc(struct worker *wrk)
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
if
(
wrk
->
nobjcore
==
NULL
)
{
if
(
wrk
->
nobjcore
==
NULL
)
wrk
->
nobjcore
=
ObjNew
(
wrk
);
wrk
->
nobjcore
->
flags
|=
OC_F_BUSY
;
}
CHECK_OBJ_NOTNULL
(
wrk
->
nobjcore
,
OBJCORE_MAGIC
);
if
(
wrk
->
nobjhead
==
NULL
)
{
...
...
@@ -120,7 +118,7 @@ HSH_Private(struct worker *wrk)
AN
(
oc
);
oc
->
refcnt
=
1
;
oc
->
objhead
=
private_oh
;
oc
->
flags
|=
OC_F_PRIVATE
|
OC_F_BUSY
;
oc
->
flags
|=
OC_F_PRIVATE
;
Lck_Lock
(
&
private_oh
->
mtx
);
VTAILQ_INSERT_TAIL
(
&
private_oh
->
objcs
,
oc
,
hsh_list
);
private_oh
->
refcnt
++
;
...
...
@@ -133,11 +131,9 @@ void
HSH_Cleanup
(
struct
worker
*
wrk
)
{
if
(
wrk
->
nobjcore
!=
NULL
)
{
FREE_OBJ
(
wrk
->
nobjcore
);
wrk
->
stats
->
n_objectcore
--
;
wrk
->
nobjcore
=
NULL
;
}
if
(
wrk
->
nobjcore
!=
NULL
)
ObjDestroy
(
wrk
,
&
wrk
->
nobjcore
);
if
(
wrk
->
nobjhead
!=
NULL
)
{
Lck_Delete
(
&
wrk
->
nobjhead
->
mtx
);
FREE_OBJ
(
wrk
->
nobjhead
);
...
...
@@ -798,14 +794,8 @@ HSH_DerefBoc(struct worker *wrk, struct objcore *oc)
if
(
r
==
0
)
oc
->
boc
=
NULL
;
Lck_Unlock
(
&
oc
->
objhead
->
mtx
);
if
(
r
==
0
)
{
if
(
oc
->
stobj
->
stevedore
!=
NULL
)
ObjStable
(
wrk
,
oc
,
boc
);
AZ
(
pthread_cond_destroy
(
&
boc
->
cond
));
Lck_Delete
(
&
boc
->
mtx
);
free
(
boc
->
vary
);
FREE_OBJ
(
boc
);
}
if
(
r
==
0
)
ObjBocDone
(
wrk
,
oc
,
&
boc
);
}
/*--------------------------------------------------------------------
...
...
@@ -850,9 +840,8 @@ HSH_DerefObjCore(struct worker *wrk, struct objcore **ocp)
if
(
oc
->
stobj
->
stevedore
!=
NULL
)
ObjFreeObj
(
wrk
,
oc
);
FREE_OBJ
(
oc
);
ObjDestroy
(
wrk
,
&
oc
);
wrk
->
stats
->
n_objectcore
--
;
/* Drop our ref on the objhead */
assert
(
oh
->
refcnt
>
0
);
(
void
)
HSH_DerefObjHead
(
wrk
,
&
oh
);
...
...
bin/varnishd/cache/cache_obj.c
View file @
44108468
...
...
@@ -54,7 +54,7 @@
* 2 ObjSetU32()
* 2 ObjSetU64()
*
* 2->3 Obj
Stable() Will no longer be modified (clean up boc)
* 2->3 Obj
BocDone() Boc removed from OC, clean it up
*
* 23 ObjHasAttr()
* 23 ObjGetAttr()
...
...
@@ -99,6 +99,34 @@ obj_getmethods(const struct objcore *oc)
return
(
oc
->
stobj
->
stevedore
->
methods
);
}
static
struct
boc
*
obj_newboc
(
void
)
{
struct
boc
*
boc
;
ALLOC_OBJ
(
boc
,
BOC_MAGIC
);
AN
(
boc
);
Lck_New
(
&
boc
->
mtx
,
lck_busyobj
);
AZ
(
pthread_cond_init
(
&
boc
->
cond
,
NULL
));
boc
->
refcount
=
1
;
return
(
boc
);
}
static
void
obj_deleteboc
(
struct
boc
**
p
)
{
struct
boc
*
boc
;
AN
(
p
);
boc
=
*
p
;
*
p
=
NULL
;
Lck_Delete
(
&
boc
->
mtx
);
AZ
(
pthread_cond_destroy
(
&
boc
->
cond
));
if
(
boc
->
vary
!=
NULL
)
free
(
boc
->
vary
);
FREE_OBJ
(
boc
);
}
/*====================================================================
* ObjNew()
*
...
...
@@ -115,14 +143,34 @@ ObjNew(struct worker *wrk)
AN
(
oc
);
wrk
->
stats
->
n_objectcore
++
;
oc
->
last_lru
=
NAN
;
ALLOC_OBJ
(
oc
->
boc
,
BOC_MAGIC
);
AN
(
oc
->
boc
);
Lck_New
(
&
oc
->
boc
->
mtx
,
lck_busyobj
);
AZ
(
pthread_cond_init
(
&
oc
->
boc
->
cond
,
NULL
));
oc
->
boc
->
refcount
=
1
;
oc
->
flags
=
OC_F_BUSY
;
oc
->
boc
=
obj_newboc
();
return
(
oc
);
}
/*====================================================================
* ObjDestroy()
*
*/
void
ObjDestroy
(
struct
worker
*
wrk
,
struct
objcore
**
p
)
{
struct
objcore
*
oc
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
AN
(
p
);
oc
=
*
p
;
*
p
=
NULL
;
CHECK_OBJ_NOTNULL
(
oc
,
OBJCORE_MAGIC
);
if
(
oc
->
boc
!=
NULL
)
obj_deleteboc
(
&
oc
->
boc
);
FREE_OBJ
(
oc
);
wrk
->
stats
->
n_objectcore
--
;
}
/*====================================================================
* ObjIterate()
*
...
...
@@ -322,14 +370,19 @@ ObjSlim(struct worker *wrk, struct objcore *oc)
*/
void
Obj
Stable
(
struct
worker
*
wrk
,
struct
objcore
*
oc
,
struct
boc
*
boc
)
Obj
BocDone
(
struct
worker
*
wrk
,
struct
objcore
*
oc
,
struct
boc
*
*
boc
)
{
const
struct
obj_methods
*
m
=
obj_getmethods
(
oc
)
;
const
struct
obj_methods
*
m
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
boc
,
BOC_MAGIC
);
if
(
m
->
objstable
!=
NULL
)
m
->
objstable
(
wrk
,
oc
,
boc
);
AN
(
boc
);
CHECK_OBJ_NOTNULL
(
*
boc
,
BOC_MAGIC
);
if
(
oc
->
stobj
->
stevedore
!=
NULL
)
{
m
=
obj_getmethods
(
oc
);
if
(
m
->
objbocdone
!=
NULL
)
m
->
objbocdone
(
wrk
,
oc
,
*
boc
);
}
obj_deleteboc
(
boc
);
}
/*====================================================================
...
...
bin/varnishd/cache/cache_obj.h
View file @
44108468
...
...
@@ -41,7 +41,7 @@ typedef int objgetspace_f(struct worker *, struct objcore *,
ssize_t
*
sz
,
uint8_t
**
ptr
);
typedef
void
objextend_f
(
struct
worker
*
,
struct
objcore
*
,
ssize_t
l
);
typedef
void
objtrimstore_f
(
struct
worker
*
,
struct
objcore
*
);
typedef
void
obj
stabl
e_f
(
struct
worker
*
,
struct
objcore
*
,
struct
boc
*
);
typedef
void
obj
bocdon
e_f
(
struct
worker
*
,
struct
objcore
*
,
struct
boc
*
);
typedef
void
objslim_f
(
struct
worker
*
,
struct
objcore
*
);
typedef
const
void
*
objgetattr_f
(
struct
worker
*
,
struct
objcore
*
,
enum
obj_attr
attr
,
ssize_t
*
len
);
...
...
@@ -55,7 +55,7 @@ struct obj_methods {
objgetspace_f
*
objgetspace
;
objextend_f
*
objextend
;
objtrimstore_f
*
objtrimstore
;
obj
stable_f
*
objstabl
e
;
obj
bocdone_f
*
objbocdon
e
;
objslim_f
*
objslim
;
objgetattr_f
*
objgetattr
;
objsetattr_f
*
objsetattr
;
...
...
bin/varnishd/storage/storage_simple.c
View file @
44108468
...
...
@@ -451,13 +451,13 @@ sml_trimstore(struct worker *wrk, struct objcore *oc)
VTAILQ_REMOVE
(
&
o
->
list
,
st
,
list
);
VTAILQ_INSERT_TAIL
(
&
o
->
list
,
st1
,
list
);
Lck_Unlock
(
&
oc
->
boc
->
mtx
);
/* sml_
stabl
e frees this */
/* sml_
bocdon
e frees this */
AZ
(
oc
->
boc
->
stevedore_priv
);
oc
->
boc
->
stevedore_priv
=
st
;
}
static
void
__match_proto__
(
obj
stabl
e_f
)
sml_
stabl
e
(
struct
worker
*
wrk
,
struct
objcore
*
oc
,
struct
boc
*
boc
)
static
void
__match_proto__
(
obj
bocdon
e_f
)
sml_
bocdon
e
(
struct
worker
*
wrk
,
struct
objcore
*
oc
,
struct
boc
*
boc
)
{
const
struct
stevedore
*
stv
;
struct
storage
*
st
;
...
...
@@ -610,7 +610,7 @@ const struct obj_methods SML_methods = {
.
objgetspace
=
sml_getspace
,
.
objextend
=
sml_extend
,
.
objtrimstore
=
sml_trimstore
,
.
obj
stable
=
sml_stabl
e
,
.
obj
bocdone
=
sml_bocdon
e
,
.
objslim
=
sml_slim
,
.
objgetattr
=
sml_getattr
,
.
objsetattr
=
sml_setattr
,
...
...
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