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
08d8a294
Commit
08d8a294
authored
Nov 05, 2018
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename VRB_ -> VRBT_ for red/black tree macros
sed 's:VRB_:VRBT_:g' -i "$FILES_CHANGED[@]" Closes #2812
parent
ba2bd1b4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
287 additions
and
287 deletions
+287
-287
flint.lnt
bin/varnishtop/flint.lnt
+2
-2
varnishtop.c
bin/varnishtop/varnishtop.c
+19
-19
flint.lnt
flint.lnt
+3
-3
vtree.h
include/vtree.h
+255
-255
vsl_dispatch.c
lib/libvarnishapi/vsl_dispatch.c
+8
-8
No files found.
bin/varnishtop/flint.lnt
View file @
08d8a294
...
...
@@ -8,8 +8,8 @@
-e732 // Loss of sign (arg. no. 2) (int to unsigned
-e713 // Loss of precision (assignment) (unsigned long long to long long)
-sem(t_order_VRB_INSERT, custodial(2))
-sem(t_key_VRB_INSERT, custodial(2))
-sem(t_order_VRB
T
_INSERT, custodial(2))
-sem(t_key_VRB
T
_INSERT, custodial(2))
///////////////////////////////////////////////////////////////////////
// Varnishstat specific
...
...
bin/varnishtop/varnishtop.c
View file @
08d8a294
...
...
@@ -70,8 +70,8 @@ struct top {
char
*
rec_buf
;
int
clen
;
unsigned
hash
;
VRB_ENTRY
(
top
)
e_order
;
VRB_ENTRY
(
top
)
e_key
;
VRB
T
_ENTRY
(
top
)
e_order
;
VRB
T
_ENTRY
(
top
)
e_key
;
double
count
;
};
...
...
@@ -85,8 +85,8 @@ static const char *ident;
static
volatile
sig_atomic_t
quit
=
0
;
static
VRB
_HEAD
(
t_order
,
top
)
h_order
=
VRB
_INITIALIZER
(
&
h_order
);
static
VRB
_HEAD
(
t_key
,
top
)
h_key
=
VRB
_INITIALIZER
(
&
h_key
);
static
VRB
T_HEAD
(
t_order
,
top
)
h_order
=
VRBT
_INITIALIZER
(
&
h_order
);
static
VRB
T_HEAD
(
t_key
,
top
)
h_key
=
VRBT
_INITIALIZER
(
&
h_key
);
static
inline
int
cmp_key
(
const
struct
top
*
a
,
const
struct
top
*
b
)
...
...
@@ -110,10 +110,10 @@ cmp_order(const struct top *a, const struct top *b)
return
(
cmp_key
(
a
,
b
));
}
VRB_PROTOTYPE_STATIC
(
t_order
,
top
,
e_order
,
cmp_order
)
VRB_GENERATE_STATIC
(
t_order
,
top
,
e_order
,
cmp_order
)
VRB_PROTOTYPE_STATIC
(
t_key
,
top
,
e_key
,
cmp_key
)
VRB_GENERATE_STATIC
(
t_key
,
top
,
e_key
,
cmp_key
)
VRB
T
_PROTOTYPE_STATIC
(
t_order
,
top
,
e_order
,
cmp_order
)
VRB
T
_GENERATE_STATIC
(
t_order
,
top
,
e_order
,
cmp_order
)
VRB
T
_PROTOTYPE_STATIC
(
t_key
,
top
,
e_key
,
cmp_key
)
VRB
T
_GENERATE_STATIC
(
t_key
,
top
,
e_key
,
cmp_key
)
static
int
v_matchproto_
(
VSLQ_dispatch_f
)
accumulate
(
struct
VSL_data
*
vsl
,
struct
VSL_transaction
*
const
pt
[],
...
...
@@ -155,12 +155,12 @@ accumulate(struct VSL_data *vsl, struct VSL_transaction * const pt[],
t
.
rec_data
=
VSL_CDATA
(
tr
->
c
->
rec
.
ptr
);
AZ
(
pthread_mutex_lock
(
&
mtx
));
tp
=
VRB_FIND
(
t_key
,
&
h_key
,
&
t
);
tp
=
VRB
T
_FIND
(
t_key
,
&
h_key
,
&
t
);
if
(
tp
)
{
VRB_REMOVE
(
t_order
,
&
h_order
,
tp
);
VRB
T
_REMOVE
(
t_order
,
&
h_order
,
tp
);
tp
->
count
+=
1
.
0
;
/* Reinsert to rebalance */
VRB_INSERT
(
t_order
,
&
h_order
,
tp
);
VRB
T
_INSERT
(
t_order
,
&
h_order
,
tp
);
}
else
{
ntop
++
;
tp
=
calloc
(
1
,
sizeof
*
tp
);
...
...
@@ -172,8 +172,8 @@ accumulate(struct VSL_data *vsl, struct VSL_transaction * const pt[],
tp
->
rec_buf
=
strdup
(
t
.
rec_data
);
tp
->
rec_data
=
tp
->
rec_buf
;
AN
(
tp
->
rec_data
);
VRB_INSERT
(
t_key
,
&
h_key
,
tp
);
VRB_INSERT
(
t_order
,
&
h_order
,
tp
);
VRB
T
_INSERT
(
t_key
,
&
h_key
,
tp
);
VRB
T
_INSERT
(
t_order
,
&
h_order
,
tp
);
}
AZ
(
pthread_mutex_unlock
(
&
mtx
));
...
...
@@ -226,8 +226,8 @@ update(int p)
else
AC
(
mvprintw
(
0
,
len
-
1
,
"%s"
,
q
));
AC
(
mvprintw
(
0
,
0
,
"list length %u"
,
ntop
));
for
(
tp
=
VRB_MIN
(
t_order
,
&
h_order
);
tp
!=
NULL
;
tp
=
tp2
)
{
tp2
=
VRB_NEXT
(
t_order
,
&
h_order
,
tp
);
for
(
tp
=
VRB
T
_MIN
(
t_order
,
&
h_order
);
tp
!=
NULL
;
tp
=
tp2
)
{
tp2
=
VRB
T
_NEXT
(
t_order
,
&
h_order
,
tp
);
if
(
++
l
<
LINES
)
{
len
=
tp
->
clen
;
...
...
@@ -243,8 +243,8 @@ update(int p)
continue
;
tp
->
count
+=
(
1
.
0
/
3
.
0
-
tp
->
count
)
/
(
double
)
n
;
if
(
tp
->
count
*
10
<
t
||
l
>
LINES
*
10
)
{
VRB_REMOVE
(
t_key
,
&
h_key
,
tp
);
VRB_REMOVE
(
t_order
,
&
h_order
,
tp
);
VRB
T
_REMOVE
(
t_key
,
&
h_key
,
tp
);
VRB
T
_REMOVE
(
t_order
,
&
h_order
,
tp
);
free
(
tp
->
rec_buf
);
free
(
tp
);
ntop
--
;
...
...
@@ -316,8 +316,8 @@ static void
dump
(
void
)
{
struct
top
*
tp
,
*
tp2
;
for
(
tp
=
VRB_MIN
(
t_order
,
&
h_order
);
tp
!=
NULL
;
tp
=
tp2
)
{
tp2
=
VRB_NEXT
(
t_order
,
&
h_order
,
tp
);
for
(
tp
=
VRB
T
_MIN
(
t_order
,
&
h_order
);
tp
!=
NULL
;
tp
=
tp2
)
{
tp2
=
VRB
T
_NEXT
(
t_order
,
&
h_order
,
tp
);
printf
(
"%9.2f %s %*.*s
\n
"
,
tp
->
count
,
VSL_tags
[
tp
->
tag
],
tp
->
clen
,
tp
->
clen
,
tp
->
rec_data
);
...
...
flint.lnt
View file @
08d8a294
...
...
@@ -142,9 +142,9 @@
///////////////////////////////////////////////////////////////////////
// <vtree.h>
-emacro(801, VRB_*) // goto considered bad
-esym(534, *_VRB_REMOVE) // ignore retval
-esym(534, *_VRB_INSERT) // ignore retval
-emacro(801, VRB
T
_*) // goto considered bad
-esym(534, *_VRB
T
_REMOVE) // ignore retval
-esym(534, *_VRB
T
_INSERT) // ignore retval
///////////////////////////////////////////////////////////////////////
// <vqueue.h>
...
...
include/vtree.h
View file @
08d8a294
...
...
@@ -291,21 +291,21 @@ void name##_VSPLAY_MINMAX(struct name *head, int __comp) \
(x) = VSPLAY_NEXT(name, head, x))
/* Macros that define a red-black tree */
#define VRB_HEAD(name, type) \
#define VRB
T
_HEAD(name, type) \
struct name { \
struct type *rbh_root;
/* root of the tree */
\
}
#define VRB_INITIALIZER(root) \
#define VRB
T
_INITIALIZER(root) \
{ NULL }
#define VRB_INIT(root) do { \
#define VRB
T
_INIT(root) do { \
(root)->rbh_root = NULL; \
} while (
/*CONSTCOND*/
0)
#define VRB_BLACK 0
#define VRB_RED 1
#define VRB_ENTRY(type) \
#define VRB
T
_BLACK 0
#define VRB
T
_RED 1
#define VRB
T
_ENTRY(type) \
struct { \
struct type *rbe_left;
/* left element */
\
struct type *rbe_right;
/* right element */
\
...
...
@@ -313,328 +313,328 @@ struct { \
int rbe_color;
/* node color */
\
}
#define VRB_LEFT(elm, field) (elm)->field.rbe_left
#define VRB_RIGHT(elm, field) (elm)->field.rbe_right
#define VRB_PARENT(elm, field) (elm)->field.rbe_parent
#define VRB_COLOR(elm, field) (elm)->field.rbe_color
#define VRB_ROOT(head) (head)->rbh_root
#define VRB
_EMPTY(head) (VRB
_ROOT(head) == NULL)
#define VRB_SET(elm, parent, field) do { \
VRB_PARENT(elm, field) = parent; \
VRB
_LEFT(elm, field) = VRB
_RIGHT(elm, field) = NULL; \
VRB
_COLOR(elm, field) = VRB
_RED; \
#define VRB
T
_LEFT(elm, field) (elm)->field.rbe_left
#define VRB
T
_RIGHT(elm, field) (elm)->field.rbe_right
#define VRB
T
_PARENT(elm, field) (elm)->field.rbe_parent
#define VRB
T
_COLOR(elm, field) (elm)->field.rbe_color
#define VRB
T
_ROOT(head) (head)->rbh_root
#define VRB
T_EMPTY(head) (VRBT
_ROOT(head) == NULL)
#define VRB
T
_SET(elm, parent, field) do { \
VRB
T
_PARENT(elm, field) = parent; \
VRB
T_LEFT(elm, field) = VRBT
_RIGHT(elm, field) = NULL; \
VRB
T_COLOR(elm, field) = VRBT
_RED; \
} while (
/*CONSTCOND*/
0)
#define VRB_SET_BLACKRED(black, red, field) do { \
VRB
_COLOR(black, field) = VRB
_BLACK; \
VRB
_COLOR(red, field) = VRB
_RED; \
#define VRB
T
_SET_BLACKRED(black, red, field) do { \
VRB
T_COLOR(black, field) = VRBT
_BLACK; \
VRB
T_COLOR(red, field) = VRBT
_RED; \
} while (
/*CONSTCOND*/
0)
#ifndef VRB_AUGMENT
#define VRB_AUGMENT(x) do {} while (0)
#ifndef VRB
T
_AUGMENT
#define VRB
T
_AUGMENT(x) do {} while (0)
#endif
#define VRB_ROTATE_LEFT(head, elm, tmp, field) do { \
(tmp) = VRB_RIGHT(elm, field); \
if ((VRB
_RIGHT(elm, field) = VRB
_LEFT(tmp, field)) != NULL) { \
VRB
_PARENT(VRB
_LEFT(tmp, field), field) = (elm); \
#define VRB
T
_ROTATE_LEFT(head, elm, tmp, field) do { \
(tmp) = VRB
T
_RIGHT(elm, field); \
if ((VRB
T_RIGHT(elm, field) = VRBT
_LEFT(tmp, field)) != NULL) { \
VRB
T_PARENT(VRBT
_LEFT(tmp, field), field) = (elm); \
} \
VRB_AUGMENT(elm); \
if ((VRB
_PARENT(tmp, field) = VRB
_PARENT(elm, field)) != NULL) {\
if ((elm) == VRB
_LEFT(VRB
_PARENT(elm, field), field)) \
VRB
_LEFT(VRB
_PARENT(elm, field), field) = (tmp);\
VRB
T
_AUGMENT(elm); \
if ((VRB
T_PARENT(tmp, field) = VRBT
_PARENT(elm, field)) != NULL) {\
if ((elm) == VRB
T_LEFT(VRBT
_PARENT(elm, field), field)) \
VRB
T_LEFT(VRBT
_PARENT(elm, field), field) = (tmp);\
else \
VRB
_RIGHT(VRB
_PARENT(elm, field), field) = (tmp);\
VRB
T_RIGHT(VRBT
_PARENT(elm, field), field) = (tmp);\
} else \
(head)->rbh_root = (tmp); \
VRB_LEFT(tmp, field) = (elm); \
VRB_PARENT(elm, field) = (tmp); \
VRB_AUGMENT(tmp); \
if ((VRB_PARENT(tmp, field))) \
VRB
_AUGMENT(VRB
_PARENT(tmp, field)); \
VRB
T
_LEFT(tmp, field) = (elm); \
VRB
T
_PARENT(elm, field) = (tmp); \
VRB
T
_AUGMENT(tmp); \
if ((VRB
T
_PARENT(tmp, field))) \
VRB
T_AUGMENT(VRBT
_PARENT(tmp, field)); \
} while (
/*CONSTCOND*/
0)
#define VRB_ROTATE_RIGHT(head, elm, tmp, field) do { \
(tmp) = VRB_LEFT(elm, field); \
if ((VRB
_LEFT(elm, field) = VRB
_RIGHT(tmp, field)) != NULL) { \
VRB
_PARENT(VRB
_RIGHT(tmp, field), field) = (elm); \
#define VRB
T
_ROTATE_RIGHT(head, elm, tmp, field) do { \
(tmp) = VRB
T
_LEFT(elm, field); \
if ((VRB
T_LEFT(elm, field) = VRBT
_RIGHT(tmp, field)) != NULL) { \
VRB
T_PARENT(VRBT
_RIGHT(tmp, field), field) = (elm); \
} \
VRB_AUGMENT(elm); \
if ((VRB
_PARENT(tmp, field) = VRB
_PARENT(elm, field)) != NULL) {\
if ((elm) == VRB
_LEFT(VRB
_PARENT(elm, field), field)) \
VRB
_LEFT(VRB
_PARENT(elm, field), field) = (tmp);\
VRB
T
_AUGMENT(elm); \
if ((VRB
T_PARENT(tmp, field) = VRBT
_PARENT(elm, field)) != NULL) {\
if ((elm) == VRB
T_LEFT(VRBT
_PARENT(elm, field), field)) \
VRB
T_LEFT(VRBT
_PARENT(elm, field), field) = (tmp);\
else \
VRB
_RIGHT(VRB
_PARENT(elm, field), field) = (tmp);\
VRB
T_RIGHT(VRBT
_PARENT(elm, field), field) = (tmp);\
} else \
(head)->rbh_root = (tmp); \
VRB_RIGHT(tmp, field) = (elm); \
VRB_PARENT(elm, field) = (tmp); \
VRB_AUGMENT(tmp); \
if ((VRB_PARENT(tmp, field))) \
VRB
_AUGMENT(VRB
_PARENT(tmp, field)); \
VRB
T
_RIGHT(tmp, field) = (elm); \
VRB
T
_PARENT(elm, field) = (tmp); \
VRB
T
_AUGMENT(tmp); \
if ((VRB
T
_PARENT(tmp, field))) \
VRB
T_AUGMENT(VRBT
_PARENT(tmp, field)); \
} while (
/*CONSTCOND*/
0)
/* Generates prototypes and inline functions */
#define VRB_PROTOTYPE(name, type, field, cmp) \
VRB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
#define VRB_PROTOTYPE_STATIC(name, type, field, cmp) \
VRB_PROTOTYPE_INTERNAL(name, type, field, cmp, v_unused_ static)
#define VRB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \
/*lint -esym(528, name##_VRB_*) */
\
attr void name##_VRB_INSERT_COLOR(struct name *, struct type *); \
attr void name##_VRB_REMOVE_COLOR(struct name *, struct type *, struct type *);\
attr struct type *name##_VRB_REMOVE(struct name *, struct type *); \
attr struct type *name##_VRB_INSERT(struct name *, struct type *); \
attr struct type *name##_VRB_FIND(const struct name *, const struct type *); \
attr struct type *name##_VRB_NFIND(const struct name *, const struct type *); \
attr struct type *name##_VRB_NEXT(struct type *); \
attr struct type *name##_VRB_PREV(struct type *); \
attr struct type *name##_VRB_MINMAX(const struct name *, int); \
#define VRB
T
_PROTOTYPE(name, type, field, cmp) \
VRB
T
_PROTOTYPE_INTERNAL(name, type, field, cmp,)
#define VRB
T
_PROTOTYPE_STATIC(name, type, field, cmp) \
VRB
T
_PROTOTYPE_INTERNAL(name, type, field, cmp, v_unused_ static)
#define VRB
T
_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \
/*lint -esym(528, name##_VRB
T
_*) */
\
attr void name##_VRB
T
_INSERT_COLOR(struct name *, struct type *); \
attr void name##_VRB
T
_REMOVE_COLOR(struct name *, struct type *, struct type *);\
attr struct type *name##_VRB
T
_REMOVE(struct name *, struct type *); \
attr struct type *name##_VRB
T
_INSERT(struct name *, struct type *); \
attr struct type *name##_VRB
T
_FIND(const struct name *, const struct type *); \
attr struct type *name##_VRB
T
_NFIND(const struct name *, const struct type *); \
attr struct type *name##_VRB
T
_NEXT(struct type *); \
attr struct type *name##_VRB
T
_PREV(struct type *); \
attr struct type *name##_VRB
T
_MINMAX(const struct name *, int); \
\
/* Main rb operation.
* Moves node close to the key of elm to top
*/
#define VRB_GENERATE(name, type, field, cmp) \
VRB_GENERATE_INTERNAL(name, type, field, cmp,)
#define VRB_GENERATE_STATIC(name, type, field, cmp) \
VRB_GENERATE_INTERNAL(name, type, field, cmp, v_unused_ static)
#define VRB_GENERATE_INTERNAL(name, type, field, cmp, attr) \
#define VRB
T
_GENERATE(name, type, field, cmp) \
VRB
T
_GENERATE_INTERNAL(name, type, field, cmp,)
#define VRB
T
_GENERATE_STATIC(name, type, field, cmp) \
VRB
T
_GENERATE_INTERNAL(name, type, field, cmp, v_unused_ static)
#define VRB
T
_GENERATE_INTERNAL(name, type, field, cmp, attr) \
attr void \
name##_VRB_INSERT_COLOR(struct name *head, struct type *elm) \
name##_VRB
T
_INSERT_COLOR(struct name *head, struct type *elm) \
{ \
struct type *parent, *gparent, *tmp; \
while ((parent = VRB_PARENT(elm, field)) != NULL && \
VRB
_COLOR(parent, field) == VRB
_RED) { \
gparent = VRB_PARENT(parent, field); \
if (parent == VRB_LEFT(gparent, field)) { \
tmp = VRB_RIGHT(gparent, field); \
if (tmp && VRB
_COLOR(tmp, field) == VRB
_RED) { \
VRB
_COLOR(tmp, field) = VRB
_BLACK; \
VRB_SET_BLACKRED(parent, gparent, field);\
while ((parent = VRB
T
_PARENT(elm, field)) != NULL && \
VRB
T_COLOR(parent, field) == VRBT
_RED) { \
gparent = VRB
T
_PARENT(parent, field); \
if (parent == VRB
T
_LEFT(gparent, field)) { \
tmp = VRB
T
_RIGHT(gparent, field); \
if (tmp && VRB
T_COLOR(tmp, field) == VRBT
_RED) { \
VRB
T_COLOR(tmp, field) = VRBT
_BLACK; \
VRB
T
_SET_BLACKRED(parent, gparent, field);\
elm = gparent; \
continue; \
} \
if (VRB_RIGHT(parent, field) == elm) { \
VRB_ROTATE_LEFT(head, parent, tmp, field);\
if (VRB
T
_RIGHT(parent, field) == elm) { \
VRB
T
_ROTATE_LEFT(head, parent, tmp, field);\
tmp = parent; \
parent = elm; \
elm = tmp; \
} \
VRB_SET_BLACKRED(parent, gparent, field); \
VRB_ROTATE_RIGHT(head, gparent, tmp, field); \
VRB
T
_SET_BLACKRED(parent, gparent, field); \
VRB
T
_ROTATE_RIGHT(head, gparent, tmp, field); \
} else { \
tmp = VRB_LEFT(gparent, field); \
if (tmp && VRB
_COLOR(tmp, field) == VRB
_RED) { \
VRB
_COLOR(tmp, field) = VRB
_BLACK; \
VRB_SET_BLACKRED(parent, gparent, field);\
tmp = VRB
T
_LEFT(gparent, field); \
if (tmp && VRB
T_COLOR(tmp, field) == VRBT
_RED) { \
VRB
T_COLOR(tmp, field) = VRBT
_BLACK; \
VRB
T
_SET_BLACKRED(parent, gparent, field);\
elm = gparent; \
continue; \
} \
if (VRB_LEFT(parent, field) == elm) { \
VRB_ROTATE_RIGHT(head, parent, tmp, field);\
if (VRB
T
_LEFT(parent, field) == elm) { \
VRB
T
_ROTATE_RIGHT(head, parent, tmp, field);\
tmp = parent; \
parent = elm; \
elm = tmp; \
} \
VRB_SET_BLACKRED(parent, gparent, field); \
VRB_ROTATE_LEFT(head, gparent, tmp, field); \
VRB
T
_SET_BLACKRED(parent, gparent, field); \
VRB
T
_ROTATE_LEFT(head, gparent, tmp, field); \
} \
} \
VRB
_COLOR(head->rbh_root, field) = VRB
_BLACK; \
VRB
T_COLOR(head->rbh_root, field) = VRBT
_BLACK; \
} \
\
attr void \
name##_VRB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \
name##_VRB
T
_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \
{ \
struct type *tmp; \
while ((elm == NULL || VRB
_COLOR(elm, field) == VRB
_BLACK) && \
elm != VRB_ROOT(head)) { \
while ((elm == NULL || VRB
T_COLOR(elm, field) == VRBT
_BLACK) && \
elm != VRB
T
_ROOT(head)) { \
AN(parent); \
if (VRB_LEFT(parent, field) == elm) { \
tmp = VRB_RIGHT(parent, field); \
if (VRB
_COLOR(tmp, field) == VRB
_RED) { \
VRB_SET_BLACKRED(tmp, parent, field); \
VRB_ROTATE_LEFT(head, parent, tmp, field);\
tmp = VRB_RIGHT(parent, field); \
if (VRB
T
_LEFT(parent, field) == elm) { \
tmp = VRB
T
_RIGHT(parent, field); \
if (VRB
T_COLOR(tmp, field) == VRBT
_RED) { \
VRB
T
_SET_BLACKRED(tmp, parent, field); \
VRB
T
_ROTATE_LEFT(head, parent, tmp, field);\
tmp = VRB
T
_RIGHT(parent, field); \
} \
if ((VRB_LEFT(tmp, field) == NULL || \
VRB
_COLOR(VRB_LEFT(tmp, field), field) == VRB
_BLACK) &&\
(VRB_RIGHT(tmp, field) == NULL || \
VRB
_COLOR(VRB_RIGHT(tmp, field), field) == VRB
_BLACK)) {\
VRB
_COLOR(tmp, field) = VRB
_RED; \
if ((VRB
T
_LEFT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_LEFT(tmp, field), field) == VRBT
_BLACK) &&\
(VRB
T
_RIGHT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_RIGHT(tmp, field), field) == VRBT
_BLACK)) {\
VRB
T_COLOR(tmp, field) = VRBT
_RED; \
elm = parent; \
parent = VRB_PARENT(elm, field); \
parent = VRB
T
_PARENT(elm, field); \
} else { \
if (VRB_RIGHT(tmp, field) == NULL || \
VRB
_COLOR(VRB_RIGHT(tmp, field), field) == VRB
_BLACK) {\
if (VRB
T
_RIGHT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_RIGHT(tmp, field), field) == VRBT
_BLACK) {\
struct type *oleft; \
if ((oleft = VRB_LEFT(tmp, field)) \
if ((oleft = VRB
T
_LEFT(tmp, field)) \
!= NULL) \
VRB
_COLOR(oleft, field) = VRB
_BLACK;\
VRB
_COLOR(tmp, field) = VRB
_RED;\
VRB_ROTATE_RIGHT(head, tmp, oleft, field);\
tmp = VRB_RIGHT(parent, field); \
VRB
T_COLOR(oleft, field) = VRBT
_BLACK;\
VRB
T_COLOR(tmp, field) = VRBT
_RED;\
VRB
T
_ROTATE_RIGHT(head, tmp, oleft, field);\
tmp = VRB
T
_RIGHT(parent, field); \
} \
VRB
_COLOR(tmp, field) = VRB
_COLOR(parent, field);\
VRB
_COLOR(parent, field) = VRB
_BLACK; \
if (VRB_RIGHT(tmp, field)) \
VRB
_COLOR(VRB_RIGHT(tmp, field), field) = VRB
_BLACK;\
VRB_ROTATE_LEFT(head, parent, tmp, field);\
elm = VRB_ROOT(head); \
VRB
T_COLOR(tmp, field) = VRBT
_COLOR(parent, field);\
VRB
T_COLOR(parent, field) = VRBT
_BLACK; \
if (VRB
T
_RIGHT(tmp, field)) \
VRB
T_COLOR(VRBT_RIGHT(tmp, field), field) = VRBT
_BLACK;\
VRB
T
_ROTATE_LEFT(head, parent, tmp, field);\
elm = VRB
T
_ROOT(head); \
break; \
} \
} else { \
tmp = VRB_LEFT(parent, field); \
if (VRB
_COLOR(tmp, field) == VRB
_RED) { \
VRB_SET_BLACKRED(tmp, parent, field); \
VRB_ROTATE_RIGHT(head, parent, tmp, field);\
tmp = VRB_LEFT(parent, field); \
tmp = VRB
T
_LEFT(parent, field); \
if (VRB
T_COLOR(tmp, field) == VRBT
_RED) { \
VRB
T
_SET_BLACKRED(tmp, parent, field); \
VRB
T
_ROTATE_RIGHT(head, parent, tmp, field);\
tmp = VRB
T
_LEFT(parent, field); \
} \
if ((VRB_LEFT(tmp, field) == NULL || \
VRB
_COLOR(VRB_LEFT(tmp, field), field) == VRB
_BLACK) &&\
(VRB_RIGHT(tmp, field) == NULL || \
VRB
_COLOR(VRB_RIGHT(tmp, field), field) == VRB
_BLACK)) {\
VRB
_COLOR(tmp, field) = VRB
_RED; \
if ((VRB
T
_LEFT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_LEFT(tmp, field), field) == VRBT
_BLACK) &&\
(VRB
T
_RIGHT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_RIGHT(tmp, field), field) == VRBT
_BLACK)) {\
VRB
T_COLOR(tmp, field) = VRBT
_RED; \
elm = parent; \
parent = VRB_PARENT(elm, field); \
parent = VRB
T
_PARENT(elm, field); \
} else { \
if (VRB_LEFT(tmp, field) == NULL || \
VRB
_COLOR(VRB_LEFT(tmp, field), field) == VRB
_BLACK) {\
if (VRB
T
_LEFT(tmp, field) == NULL || \
VRB
T_COLOR(VRBT_LEFT(tmp, field), field) == VRBT
_BLACK) {\
struct type *oright; \
if ((oright = VRB_RIGHT(tmp, field)) \
if ((oright = VRB
T
_RIGHT(tmp, field)) \
!= NULL) \
VRB
_COLOR(oright, field) = VRB
_BLACK;\
VRB
_COLOR(tmp, field) = VRB
_RED;\
VRB_ROTATE_LEFT(head, tmp, oright, field);\
tmp = VRB_LEFT(parent, field); \
VRB
T_COLOR(oright, field) = VRBT
_BLACK;\
VRB
T_COLOR(tmp, field) = VRBT
_RED;\
VRB
T
_ROTATE_LEFT(head, tmp, oright, field);\
tmp = VRB
T
_LEFT(parent, field); \
} \
VRB
_COLOR(tmp, field) = VRB
_COLOR(parent, field);\
VRB
_COLOR(parent, field) = VRB
_BLACK; \
if (VRB_LEFT(tmp, field)) \
VRB
_COLOR(VRB_LEFT(tmp, field), field) = VRB
_BLACK;\
VRB_ROTATE_RIGHT(head, parent, tmp, field);\
elm = VRB_ROOT(head); \
VRB
T_COLOR(tmp, field) = VRBT
_COLOR(parent, field);\
VRB
T_COLOR(parent, field) = VRBT
_BLACK; \
if (VRB
T
_LEFT(tmp, field)) \
VRB
T_COLOR(VRBT_LEFT(tmp, field), field) = VRBT
_BLACK;\
VRB
T
_ROTATE_RIGHT(head, parent, tmp, field);\
elm = VRB
T
_ROOT(head); \
break; \
} \
} \
} \
if (elm) \
VRB
_COLOR(elm, field) = VRB
_BLACK; \
VRB
T_COLOR(elm, field) = VRBT
_BLACK; \
} \
\
attr struct type * \
name##_VRB_REMOVE(struct name *head, struct type *elm) \
name##_VRB
T
_REMOVE(struct name *head, struct type *elm) \
{ \
struct type *child, *parent, *old = elm; \
int color; \
if (VRB_LEFT(elm, field) == NULL) \
child = VRB_RIGHT(elm, field); \
else if (VRB_RIGHT(elm, field) == NULL) \
child = VRB_LEFT(elm, field); \
if (VRB
T
_LEFT(elm, field) == NULL) \
child = VRB
T
_RIGHT(elm, field); \
else if (VRB
T
_RIGHT(elm, field) == NULL) \
child = VRB
T
_LEFT(elm, field); \
else { \
struct type *left; \
elm = VRB_RIGHT(elm, field); \
while ((left = VRB_LEFT(elm, field)) != NULL) \
elm = VRB
T
_RIGHT(elm, field); \
while ((left = VRB
T
_LEFT(elm, field)) != NULL) \
elm = left; \
child = VRB_RIGHT(elm, field); \
parent = VRB_PARENT(elm, field); \
color = VRB_COLOR(elm, field); \
child = VRB
T
_RIGHT(elm, field); \
parent = VRB
T
_PARENT(elm, field); \
color = VRB
T
_COLOR(elm, field); \
if (child) \
VRB_PARENT(child, field) = parent; \
VRB
T
_PARENT(child, field) = parent; \
if (parent) { \
if (VRB_LEFT(parent, field) == elm) \
VRB_LEFT(parent, field) = child; \
if (VRB
T
_LEFT(parent, field) == elm) \
VRB
T
_LEFT(parent, field) = child; \
else \
VRB_RIGHT(parent, field) = child; \
VRB_AUGMENT(parent); \
VRB
T
_RIGHT(parent, field) = child; \
VRB
T
_AUGMENT(parent); \
} else \
VRB_ROOT(head) = child; \
if (VRB_PARENT(elm, field) == old) \
VRB
T
_ROOT(head) = child; \
if (VRB
T
_PARENT(elm, field) == old) \
parent = elm; \
(elm)->field = (old)->field; \
if (VRB_PARENT(old, field)) { \
if (VRB
_LEFT(VRB
_PARENT(old, field), field) == old)\
VRB
_LEFT(VRB
_PARENT(old, field), field) = elm;\
if (VRB
T
_PARENT(old, field)) { \
if (VRB
T_LEFT(VRBT
_PARENT(old, field), field) == old)\
VRB
T_LEFT(VRBT
_PARENT(old, field), field) = elm;\
else \
VRB
_RIGHT(VRB
_PARENT(old, field), field) = elm;\
VRB
_AUGMENT(VRB
_PARENT(old, field)); \
VRB
T_RIGHT(VRBT
_PARENT(old, field), field) = elm;\
VRB
T_AUGMENT(VRBT
_PARENT(old, field)); \
} else \
VRB_ROOT(head) = elm; \
VRB
_PARENT(VRB
_LEFT(old, field), field) = elm; \
if (VRB_RIGHT(old, field)) \
VRB
_PARENT(VRB
_RIGHT(old, field), field) = elm; \
VRB
T
_ROOT(head) = elm; \
VRB
T_PARENT(VRBT
_LEFT(old, field), field) = elm; \
if (VRB
T
_RIGHT(old, field)) \
VRB
T_PARENT(VRBT
_RIGHT(old, field), field) = elm; \
if (parent) { \
left = parent; \
do { \
VRB_AUGMENT(left); \
} while ((left = VRB_PARENT(left, field)) != NULL); \
VRB
T
_AUGMENT(left); \
} while ((left = VRB
T
_PARENT(left, field)) != NULL); \
} \
goto color; \
} \
parent = VRB_PARENT(elm, field); \
color = VRB_COLOR(elm, field); \
parent = VRB
T
_PARENT(elm, field); \
color = VRB
T
_COLOR(elm, field); \
if (child) \
VRB_PARENT(child, field) = parent; \
VRB
T
_PARENT(child, field) = parent; \
if (parent) { \
if (VRB_LEFT(parent, field) == elm) \
VRB_LEFT(parent, field) = child; \
if (VRB
T
_LEFT(parent, field) == elm) \
VRB
T
_LEFT(parent, field) = child; \
else \
VRB_RIGHT(parent, field) = child; \
VRB_AUGMENT(parent); \
VRB
T
_RIGHT(parent, field) = child; \
VRB
T
_AUGMENT(parent); \
} else \
VRB_ROOT(head) = child; \
VRB
T
_ROOT(head) = child; \
color: \
if (color == VRB_BLACK) { \
name##_VRB_REMOVE_COLOR(head, parent, child); \
if (color == VRB
T
_BLACK) { \
name##_VRB
T
_REMOVE_COLOR(head, parent, child); \
} \
return (old); \
} \
\
/* Inserts a node into the RB tree */
\
attr struct type * \
name##_VRB_INSERT(struct name *head, struct type *elm) \
name##_VRB
T
_INSERT(struct name *head, struct type *elm) \
{ \
struct type *tmp; \
struct type *parent = NULL; \
int comp = 0; \
tmp = VRB_ROOT(head); \
tmp = VRB
T
_ROOT(head); \
while (tmp) { \
parent = tmp; \
comp = (cmp)(elm, parent); \
if (comp < 0) \
tmp = VRB_LEFT(tmp, field); \
tmp = VRB
T
_LEFT(tmp, field); \
else if (comp > 0) \
tmp = VRB_RIGHT(tmp, field); \
tmp = VRB
T
_RIGHT(tmp, field); \
else \
return (tmp); \
} \
VRB_SET(elm, parent, field); \
VRB
T
_SET(elm, parent, field); \
if (parent != NULL) { \
if (comp < 0) \
VRB_LEFT(parent, field) = elm; \
VRB
T
_LEFT(parent, field) = elm; \
else \
VRB_RIGHT(parent, field) = elm; \
VRB_AUGMENT(parent); \
VRB
T
_RIGHT(parent, field) = elm; \
VRB
T
_AUGMENT(parent); \
} else \
VRB_ROOT(head) = elm; \
name##_VRB_INSERT_COLOR(head, elm); \
VRB
T
_ROOT(head) = elm; \
name##_VRB
T
_INSERT_COLOR(head, elm); \
return (NULL); \
} \
\
/* Finds the node with the same key as elm */
\
attr struct type * \
name##_VRB_FIND(const struct name *head, const struct type *elm) \
name##_VRB
T
_FIND(const struct name *head, const struct type *elm) \
{ \
struct type *tmp = VRB_ROOT(head); \
struct type *tmp = VRB
T
_ROOT(head); \
int comp; \
while (tmp) { \
comp = cmp(elm, tmp); \
if (comp < 0) \
tmp = VRB_LEFT(tmp, field); \
tmp = VRB
T
_LEFT(tmp, field); \
else if (comp > 0) \
tmp = VRB_RIGHT(tmp, field); \
tmp = VRB
T
_RIGHT(tmp, field); \
else \
return (tmp); \
} \
...
...
@@ -643,19 +643,19 @@ name##_VRB_FIND(const struct name *head, const struct type *elm) \
\
/* Finds the first node greater than or equal to the search key */
\
attr struct type * \
name##_VRB_NFIND(const struct name *head, const struct type *elm) \
name##_VRB
T
_NFIND(const struct name *head, const struct type *elm) \
{ \
struct type *tmp = VRB_ROOT(head); \
struct type *tmp = VRB
T
_ROOT(head); \
struct type *res = NULL; \
int comp; \
while (tmp) { \
comp = cmp(elm, tmp); \
if (comp < 0) { \
res = tmp; \
tmp = VRB_LEFT(tmp, field); \
tmp = VRB
T
_LEFT(tmp, field); \
} \
else if (comp > 0) \
tmp = VRB_RIGHT(tmp, field); \
tmp = VRB
T
_RIGHT(tmp, field); \
else \
return (tmp); \
} \
...
...
@@ -664,21 +664,21 @@ name##_VRB_NFIND(const struct name *head, const struct type *elm) \
\
/* ARGSUSED */
\
attr struct type * \
name##_VRB_NEXT(struct type *elm) \
name##_VRB
T
_NEXT(struct type *elm) \
{ \
if (VRB_RIGHT(elm, field)) { \
elm = VRB_RIGHT(elm, field); \
while (VRB_LEFT(elm, field)) \
elm = VRB_LEFT(elm, field); \
if (VRB
T
_RIGHT(elm, field)) { \
elm = VRB
T
_RIGHT(elm, field); \
while (VRB
T
_LEFT(elm, field)) \
elm = VRB
T
_LEFT(elm, field); \
} else { \
if (VRB_PARENT(elm, field) && \
(elm == VRB
_LEFT(VRB
_PARENT(elm, field), field))) \
elm = VRB_PARENT(elm, field); \
if (VRB
T
_PARENT(elm, field) && \
(elm == VRB
T_LEFT(VRBT
_PARENT(elm, field), field))) \
elm = VRB
T
_PARENT(elm, field); \
else { \
while (VRB_PARENT(elm, field) && \
(elm == VRB
_RIGHT(VRB
_PARENT(elm, field), field)))\
elm = VRB_PARENT(elm, field); \
elm = VRB_PARENT(elm, field); \
while (VRB
T
_PARENT(elm, field) && \
(elm == VRB
T_RIGHT(VRBT
_PARENT(elm, field), field)))\
elm = VRB
T
_PARENT(elm, field); \
elm = VRB
T
_PARENT(elm, field); \
} \
} \
return (elm); \
...
...
@@ -686,81 +686,81 @@ name##_VRB_NEXT(struct type *elm) \
\
/* ARGSUSED */
\
attr struct type * \
name##_VRB_PREV(struct type *elm) \
name##_VRB
T
_PREV(struct type *elm) \
{ \
if (VRB_LEFT(elm, field)) { \
elm = VRB_LEFT(elm, field); \
while (VRB_RIGHT(elm, field)) \
elm = VRB_RIGHT(elm, field); \
if (VRB
T
_LEFT(elm, field)) { \
elm = VRB
T
_LEFT(elm, field); \
while (VRB
T
_RIGHT(elm, field)) \
elm = VRB
T
_RIGHT(elm, field); \
} else { \
if (VRB_PARENT(elm, field) && \
(elm == VRB
_RIGHT(VRB
_PARENT(elm, field), field))) \
elm = VRB_PARENT(elm, field); \
if (VRB
T
_PARENT(elm, field) && \
(elm == VRB
T_RIGHT(VRBT
_PARENT(elm, field), field))) \
elm = VRB
T
_PARENT(elm, field); \
else { \
while (VRB_PARENT(elm, field) && \
(elm == VRB
_LEFT(VRB
_PARENT(elm, field), field)))\
elm = VRB_PARENT(elm, field); \
elm = VRB_PARENT(elm, field); \
while (VRB
T
_PARENT(elm, field) && \
(elm == VRB
T_LEFT(VRBT
_PARENT(elm, field), field)))\
elm = VRB
T
_PARENT(elm, field); \
elm = VRB
T
_PARENT(elm, field); \
} \
} \
return (elm); \
} \
\
attr struct type * \
name##_VRB_MINMAX(const struct name *head, int val) \
name##_VRB
T
_MINMAX(const struct name *head, int val) \
{ \
struct type *tmp = VRB_ROOT(head); \
struct type *tmp = VRB
T
_ROOT(head); \
struct type *parent = NULL; \
while (tmp) { \
parent = tmp; \
if (val < 0) \
tmp = VRB_LEFT(tmp, field); \
tmp = VRB
T
_LEFT(tmp, field); \
else \
tmp = VRB_RIGHT(tmp, field); \
tmp = VRB
T
_RIGHT(tmp, field); \
} \
return (parent); \
}
#define VRB_NEGINF -1
#define VRB_INF 1
#define VRB
T
_NEGINF -1
#define VRB
T
_INF 1
#define VRB
_INSERT(name, x, y) name##_VRB
_INSERT(x, y)
#define VRB
_REMOVE(name, x, y) name##_VRB
_REMOVE(x, y)
#define VRB
_FIND(name, x, y) name##_VRB
_FIND(x, y)
#define VRB
_NFIND(name, x, y) name##_VRB
_NFIND(x, y)
#define VRB
_NEXT(name, x, y) name##_VRB
_NEXT(y)
#define VRB
_PREV(name, x, y) name##_VRB
_PREV(y)
#define VRB
_MIN(name, x) name##_VRB_MINMAX(x, VRB
_NEGINF)
#define VRB
_MAX(name, x) name##_VRB_MINMAX(x, VRB
_INF)
#define VRB
T_INSERT(name, x, y) name##_VRBT
_INSERT(x, y)
#define VRB
T_REMOVE(name, x, y) name##_VRBT
_REMOVE(x, y)
#define VRB
T_FIND(name, x, y) name##_VRBT
_FIND(x, y)
#define VRB
T_NFIND(name, x, y) name##_VRBT
_NFIND(x, y)
#define VRB
T_NEXT(name, x, y) name##_VRBT
_NEXT(y)
#define VRB
T_PREV(name, x, y) name##_VRBT
_PREV(y)
#define VRB
T_MIN(name, x) name##_VRBT_MINMAX(x, VRBT
_NEGINF)
#define VRB
T_MAX(name, x) name##_VRBT_MINMAX(x, VRBT
_INF)
#define VRB_FOREACH(x, name, head) \
for ((x) = VRB_MIN(name, head); \
#define VRB
T
_FOREACH(x, name, head) \
for ((x) = VRB
T
_MIN(name, head); \
(x) != NULL; \
(x) = name##_VRB_NEXT(x))
(x) = name##_VRB
T
_NEXT(x))
#define VRB_FOREACH_FROM(x, name, y) \
#define VRB
T
_FOREACH_FROM(x, name, y) \
for ((x) = (y); \
((x) != NULL) && ((y) = name##_VRB_NEXT(x), (x) != NULL); \
((x) != NULL) && ((y) = name##_VRB
T
_NEXT(x), (x) != NULL); \
(x) = (y))
#define VRB_FOREACH_SAFE(x, name, head, y) \
for ((x) = VRB_MIN(name, head); \
((x) != NULL) && ((y) = name##_VRB_NEXT(x), (x) != NULL); \
#define VRB
T
_FOREACH_SAFE(x, name, head, y) \
for ((x) = VRB
T
_MIN(name, head); \
((x) != NULL) && ((y) = name##_VRB
T
_NEXT(x), (x) != NULL); \
(x) = (y))
#define VRB_FOREACH_REVERSE(x, name, head) \
for ((x) = VRB_MAX(name, head); \
#define VRB
T
_FOREACH_REVERSE(x, name, head) \
for ((x) = VRB
T
_MAX(name, head); \
(x) != NULL; \
(x) = name##_VRB_PREV(x))
(x) = name##_VRB
T
_PREV(x))
#define VRB_FOREACH_REVERSE_FROM(x, name, y) \
#define VRB
T
_FOREACH_REVERSE_FROM(x, name, y) \
for ((x) = (y); \
((x) != NULL) && ((y) = name##_VRB_PREV(x), (x) != NULL); \
((x) != NULL) && ((y) = name##_VRB
T
_PREV(x), (x) != NULL); \
(x) = (y))
#define VRB_FOREACH_REVERSE_SAFE(x, name, head, y) \
for ((x) = VRB_MAX(name, head); \
((x) != NULL) && ((y) = name##_VRB_PREV(x), (x) != NULL); \
#define VRB
T
_FOREACH_REVERSE_SAFE(x, name, head, y) \
for ((x) = VRB
T
_MAX(name, head); \
((x) != NULL) && ((y) = name##_VRB
T
_PREV(x), (x) != NULL); \
(x) = (y))
#endif
/* _VTREE_H_ */
lib/libvarnishapi/vsl_dispatch.c
View file @
08d8a294
...
...
@@ -135,9 +135,9 @@ struct vslc_vtx {
struct
vtx_key
{
unsigned
vxid
;
VRB_ENTRY
(
vtx_key
)
entry
;
VRB
T
_ENTRY
(
vtx_key
)
entry
;
};
VRB_HEAD
(
vtx_tree
,
vtx_key
);
VRB
T
_HEAD
(
vtx_tree
,
vtx_key
);
struct
vtx
{
struct
vtx_key
key
;
...
...
@@ -222,8 +222,8 @@ vtx_keycmp(const struct vtx_key *a, const struct vtx_key *b)
return
(
0
);
}
VRB_PROTOTYPE_STATIC
(
vtx_tree
,
vtx_key
,
entry
,
vtx_keycmp
)
VRB_GENERATE_STATIC
(
vtx_tree
,
vtx_key
,
entry
,
vtx_keycmp
)
VRB
T
_PROTOTYPE_STATIC
(
vtx_tree
,
vtx_key
,
entry
,
vtx_keycmp
)
VRB
T
_GENERATE_STATIC
(
vtx_tree
,
vtx_key
,
entry
,
vtx_keycmp
)
static
enum
vsl_status
v_matchproto_
(
vslc_next_f
)
vslc_raw_next
(
const
struct
VSL_cursor
*
cursor
)
...
...
@@ -549,7 +549,7 @@ vtx_retire(struct VSLQ *vslq, struct vtx **pvtx)
AZ
(
vtx
->
n_child
);
AZ
(
vtx
->
n_descend
);
vtx
->
n_childready
=
0
;
AN
(
VRB_REMOVE
(
vtx_tree
,
&
vslq
->
tree
,
&
vtx
->
key
));
AN
(
VRB
T
_REMOVE
(
vtx_tree
,
&
vslq
->
tree
,
&
vtx
->
key
));
vtx
->
key
.
vxid
=
0
;
vtx
->
flags
=
0
;
...
...
@@ -594,7 +594,7 @@ vtx_lookup(const struct VSLQ *vslq, unsigned vxid)
AN
(
vslq
);
lkey
.
vxid
=
vxid
;
key
=
VRB_FIND
(
vtx_tree
,
&
vslq
->
tree
,
&
lkey
);
key
=
VRB
T
_FIND
(
vtx_tree
,
&
vslq
->
tree
,
&
lkey
);
if
(
key
==
NULL
)
return
(
NULL
);
CAST_OBJ_NOTNULL
(
vtx
,
(
void
*
)
key
,
VTX_MAGIC
);
...
...
@@ -611,7 +611,7 @@ vtx_add(struct VSLQ *vslq, unsigned vxid)
vtx
=
vtx_new
(
vslq
);
AN
(
vtx
);
vtx
->
key
.
vxid
=
vxid
;
AZ
(
VRB_INSERT
(
vtx_tree
,
&
vslq
->
tree
,
&
vtx
->
key
));
AZ
(
VRB
T
_INSERT
(
vtx_tree
,
&
vslq
->
tree
,
&
vtx
->
key
));
VTAILQ_INSERT_TAIL
(
&
vslq
->
incomplete
,
vtx
,
list_vtx
);
vslq
->
n_outstanding
++
;
return
(
vtx
);
...
...
@@ -1080,7 +1080,7 @@ VSLQ_New(struct VSL_data *vsl, struct VSL_cursor **cp,
vslq
->
query
=
query
;
/* Setup normal mode */
VRB_INIT
(
&
vslq
->
tree
);
VRB
T
_INIT
(
&
vslq
->
tree
);
VTAILQ_INIT
(
&
vslq
->
ready
);
VTAILQ_INIT
(
&
vslq
->
incomplete
);
VTAILQ_INIT
(
&
vslq
->
shmrefs
);
...
...
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