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
0783808a
Commit
0783808a
authored
Jul 07, 2014
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split the init and fini functions out for VFP's.
parent
40d5594d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
150 additions
and
124 deletions
+150
-124
cache.h
bin/varnishd/cache/cache.h
+0
-2
cache_esi_fetch.c
bin/varnishd/cache/cache_esi_fetch.c
+55
-34
cache_fetch_proc.c
bin/varnishd/cache/cache_fetch_proc.c
+16
-17
cache_filter.h
bin/varnishd/cache/cache_filter.h
+8
-0
cache_gzip.c
bin/varnishd/cache/cache_gzip.c
+67
-59
cache_http1_fetch.c
bin/varnishd/cache/cache_http1_fetch.c
+3
-12
flint.lnt
bin/varnishd/flint.lnt
+1
-0
No files found.
bin/varnishd/cache/cache.h
View file @
0783808a
...
...
@@ -885,8 +885,6 @@ void VFP_Init(void);
void
VFP_Fetch_Body
(
struct
busyobj
*
bo
,
ssize_t
est
);
void
VFP_Push
(
struct
busyobj
*
,
const
struct
vfp
*
,
intptr_t
priv
);
enum
vfp_status
VFP_Suck
(
struct
busyobj
*
,
void
*
p
,
ssize_t
*
lp
);
extern
char
vfp_init
[];
extern
char
vfp_fini
[];
/* cache_gzip.c */
struct
vgz
;
...
...
bin/varnishd/cache/cache_esi_fetch.c
View file @
0783808a
...
...
@@ -141,6 +141,29 @@ vfp_esi_end(struct busyobj *bo, struct vef_priv *vef, enum vfp_status retval)
return
(
retval
);
}
static
enum
vfp_status
__match_proto__
(
vfp_init_f
)
vfp_esi_gzip_init
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
)
{
struct
vef_priv
*
vef
;
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
ALLOC_OBJ
(
vef
,
VEF_MAGIC
);
if
(
vef
==
NULL
)
return
(
VFP_ERROR
);
vef
->
vgz
=
VGZ_NewGzip
(
bo
->
vsl
,
"G F E"
);
vef
->
vep
=
VEP_Init
(
bo
,
vfp_vep_callback
,
vef
);
vef
->
ibuf_sz
=
cache_param
->
gzip_buffer
;
vef
->
ibuf
=
calloc
(
1L
,
vef
->
ibuf_sz
);
if
(
vef
->
ibuf
==
NULL
)
return
(
vfp_esi_end
(
bo
,
vef
,
VFP_ERROR
));
XXXAN
(
vef
->
ibuf
);
vef
->
ibuf_i
=
vef
->
ibuf
;
vef
->
ibuf_o
=
vef
->
ibuf
;
vfe
->
priv1
=
vef
;
return
(
VFP_OK
);
}
static
enum
vfp_status
__match_proto__
(
vfp_pull_f
)
vfp_esi_gzip_pull
(
struct
busyobj
*
bo
,
void
*
p
,
ssize_t
*
lp
,
struct
vfp_entry
*
vfe
)
...
...
@@ -151,29 +174,10 @@ vfp_esi_gzip_pull(struct busyobj *bo, void *p, ssize_t *lp,
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
{
ALLOC_OBJ
(
vef
,
VEF_MAGIC
);
XXXAN
(
vef
);
vef
->
vgz
=
VGZ_NewGzip
(
bo
->
vsl
,
"G F E"
);
vef
->
vep
=
VEP_Init
(
bo
,
vfp_vep_callback
,
vef
);
vef
->
ibuf_sz
=
cache_param
->
gzip_buffer
;
vef
->
ibuf
=
calloc
(
1L
,
vef
->
ibuf_sz
);
XXXAN
(
vef
->
ibuf
);
vef
->
ibuf_i
=
vef
->
ibuf
;
vef
->
ibuf_o
=
vef
->
ibuf
;
vfe
->
priv1
=
vef
;
return
(
VFP_OK
);
}
if
(
p
==
vfp_fini
)
{
if
(
vfe
->
priv1
!=
NULL
)
(
void
)
vfp_esi_end
(
bo
,
vfe
->
priv1
,
VFP_ERROR
);
vfe
->
priv1
=
NULL
;
return
(
VFP_ERROR
);
}
CAST_OBJ_NOTNULL
(
vef
,
vfe
->
priv1
,
VEF_MAGIC
);
AN
(
p
);
AN
(
lp
);
*
lp
=
0
;
CAST_OBJ_NOTNULL
(
vef
,
vfe
->
priv1
,
VEF_MAGIC
);
l
=
vef
->
ibuf_sz
-
(
vef
->
ibuf_i
-
vef
->
ibuf
);
if
(
DO_DEBUG
(
DBG_ESI_CHOP
))
{
d
=
(
random
()
&
3
)
+
1
;
...
...
@@ -203,6 +207,19 @@ vfp_esi_gzip_pull(struct busyobj *bo, void *p, ssize_t *lp,
return
(
vp
);
}
static
enum
vfp_status
__match_proto__
(
vfp_init_f
)
vfp_esi_init
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
)
{
struct
vef_priv
*
vef
;
ALLOC_OBJ
(
vef
,
VEF_MAGIC
);
if
(
vef
==
NULL
)
return
(
VFP_ERROR
);
vef
->
vep
=
VEP_Init
(
bo
,
NULL
,
NULL
);
vfe
->
priv1
=
vef
;
return
(
VFP_OK
);
}
static
enum
vfp_status
__match_proto__
(
vfp_pull_f
)
vfp_esi_pull
(
struct
busyobj
*
bo
,
void
*
p
,
ssize_t
*
lp
,
struct
vfp_entry
*
vfe
)
{
...
...
@@ -212,22 +229,9 @@ vfp_esi_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
{
ALLOC_OBJ
(
vef
,
VEF_MAGIC
);
XXXAN
(
vef
);
vef
->
vep
=
VEP_Init
(
bo
,
NULL
,
NULL
);
vfe
->
priv1
=
vef
;
return
(
VFP_OK
);
}
if
(
p
==
vfp_fini
)
{
if
(
vfe
->
priv1
!=
NULL
)
(
void
)
vfp_esi_end
(
bo
,
vfe
->
priv1
,
VFP_ERROR
);
vfe
->
priv1
=
NULL
;
return
(
VFP_ERROR
);
}
CAST_OBJ_NOTNULL
(
vef
,
vfe
->
priv1
,
VEF_MAGIC
);
AN
(
p
);
AN
(
lp
);
CAST_OBJ_NOTNULL
(
vef
,
vfe
->
priv1
,
VEF_MAGIC
);
if
(
DO_DEBUG
(
DBG_ESI_CHOP
))
{
d
=
(
random
()
&
3
)
+
1
;
if
(
d
<
*
lp
)
...
...
@@ -243,10 +247,27 @@ vfp_esi_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
return
(
vp
);
}
static
void
__match_proto__
(
vfp_fini_f
)
vfp_esi_fini
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
)
{
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
vfe
->
priv1
!=
NULL
)
(
void
)
vfp_esi_end
(
bo
,
vfe
->
priv1
,
VFP_ERROR
);
vfe
->
priv1
=
NULL
;
}
const
struct
vfp
vfp_esi
=
{
.
name
=
"ESI"
,
.
init
=
vfp_esi_init
,
.
pull
=
vfp_esi_pull
,
.
fini
=
vfp_esi_fini
,
};
const
struct
vfp
vfp_esi_gzip
=
{
.
name
=
"ESI_GZIP"
,
.
init
=
vfp_esi_gzip_init
,
.
pull
=
vfp_esi_gzip_pull
,
.
fini
=
vfp_esi_fini
,
};
bin/varnishd/cache/cache_fetch_proc.c
View file @
0783808a
...
...
@@ -43,9 +43,6 @@
static
unsigned
fetchfrag
;
char
vfp_init
[]
=
"<init>"
;
char
vfp_fini
[]
=
"<fini>"
;
/*--------------------------------------------------------------------
* We want to issue the first error we encounter on fetching and
* supress the rest. This function does that.
...
...
@@ -111,35 +108,33 @@ VFP_GetStorage(struct busyobj *bo, ssize_t sz)
/**********************************************************************
*/
static
enum
vfp_status
vfp_call
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
,
void
*
p
,
ssize_t
*
lp
)
{
AN
(
vfe
->
vfp
->
pull
);
return
(
vfe
->
vfp
->
pull
(
bo
,
p
,
lp
,
vfe
));
}
static
void
vfp_suck_fini
(
struct
busyobj
*
bo
)
{
struct
vfp_entry
*
vfe
;
VTAILQ_FOREACH
(
vfe
,
&
bo
->
vfp
,
list
)
{
if
(
vfe
->
vfp
!=
NULL
)
(
void
)
vfp_call
(
bo
,
vfe
,
vfp_fini
,
NULL
);
if
(
vfe
->
vfp
!=
NULL
&&
vfe
->
vfp
->
fini
!=
NULL
)
vfe
->
vfp
->
fini
(
bo
,
vfe
);
}
}
static
enum
vfp_status
vfp_suck_init
(
struct
busyobj
*
bo
)
{
enum
vfp_status
retval
=
VFP_
ERROR
;
enum
vfp_status
retval
=
VFP_
OK
;
struct
vfp_entry
*
vfe
;
VTAILQ_FOREACH
(
vfe
,
&
bo
->
vfp
,
list
)
{
retval
=
vfp_call
(
bo
,
vfe
,
vfp_init
,
NULL
);
if
(
vfe
->
vfp
->
init
==
NULL
)
continue
;
retval
=
vfe
->
vfp
->
init
(
bo
,
vfe
);
if
(
retval
!=
VFP_OK
)
{
(
void
)
VFP_Error
(
bo
,
"Fetch filter %s failed to initialize"
,
vfe
->
vfp
->
name
);
vfp_suck_fini
(
bo
);
break
;
return
(
retval
)
;
}
}
return
(
retval
);
...
...
@@ -170,9 +165,13 @@ VFP_Suck(struct busyobj *bo, void *p, ssize_t *lp)
bo
->
vfp_nxt
=
vfe
;
return
(
vp
);
}
else
{
vp
=
vfp_call
(
bo
,
vfe
,
p
,
lp
);
vp
=
vfe
->
vfp
->
pull
(
bo
,
p
,
lp
,
vfe
);
if
(
vp
==
VFP_ERROR
)
(
void
)
VFP_Error
(
bo
,
"Fetch filter %s returned %d"
,
vfe
->
vfp
->
name
,
vp
);
if
(
vp
!=
VFP_OK
)
{
(
void
)
vfp_call
(
bo
,
vfe
,
vfp_fini
,
NULL
);
if
(
vfe
->
vfp
->
fini
!=
NULL
)
vfe
->
vfp
->
fini
(
bo
,
vfe
);
vfe
->
vfp
=
NULL
;
vfe
->
priv2
=
vp
;
}
...
...
bin/varnishd/cache/cache_filter.h
View file @
0783808a
...
...
@@ -38,11 +38,19 @@ enum vfp_status {
VFP_OK
=
0
,
VFP_END
=
1
,
};
typedef
enum
vfp_status
vfp_init_f
(
struct
busyobj
*
,
struct
vfp_entry
*
);
typedef
enum
vfp_status
vfp_pull_f
(
struct
busyobj
*
,
void
*
ptr
,
ssize_t
*
len
,
struct
vfp_entry
*
);
typedef
void
vfp_fini_f
(
struct
busyobj
*
,
struct
vfp_entry
*
);
struct
vfp
{
const
char
*
name
;
vfp_init_f
*
init
;
vfp_pull_f
*
pull
;
vfp_fini_f
*
fini
;
const
void
*
priv1
;
intptr_t
priv2
;
};
extern
const
struct
vfp
vfp_gunzip
;
...
...
bin/varnishd/cache/cache_gzip.c
View file @
0783808a
...
...
@@ -444,6 +444,30 @@ VGZ_Destroy(struct vgz **vgp)
return
(
vr
);
}
/*--------------------------------------------------------------------*/
static
enum
vfp_status
__match_proto__
(
vfp_init_f
)
vfp_gzip_init
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
)
{
struct
vgz
*
vg
;
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
vfe
->
vfp
->
priv2
)
vg
=
VGZ_NewGzip
(
bo
->
vsl
,
vfe
->
vfp
->
priv1
);
else
vg
=
VGZ_NewUngzip
(
bo
->
vsl
,
vfe
->
vfp
->
priv1
);
if
(
vg
==
NULL
)
return
(
VFP_ERROR
);
if
(
vgz_getmbuf
(
vg
))
return
(
VFP_ERROR
);
vfe
->
priv1
=
vg
;
VGZ_Ibuf
(
vg
,
vg
->
m_buf
,
0
);
AZ
(
vg
->
m_len
);
return
(
VFP_OK
);
}
/*--------------------------------------------------------------------
* VFP_GUNZIP
*
...
...
@@ -462,26 +486,9 @@ vfp_gunzip_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
{
vg
=
VGZ_NewUngzip
(
bo
->
vsl
,
"U F -"
);
XXXAZ
(
vgz_getmbuf
(
vg
));
vfe
->
priv1
=
vg
;
VGZ_Ibuf
(
vg
,
vg
->
m_buf
,
0
);
AZ
(
vg
->
m_len
);
return
(
VFP_OK
);
}
if
(
p
==
vfp_fini
)
{
if
(
vfe
->
priv1
!=
NULL
)
{
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
vfe
->
priv1
=
NULL
;
(
void
)
VGZ_Destroy
(
&
vg
);
}
vfe
->
priv1
=
NULL
;
return
(
VFP_ERROR
);
}
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
AN
(
p
);
AN
(
lp
);
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
l
=
*
lp
;
*
lp
=
0
;
VGZ_Obuf
(
vg
,
p
,
l
);
...
...
@@ -513,10 +520,6 @@ vfp_gunzip_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
return
(
vp
);
}
const
struct
vfp
vfp_gunzip
=
{
.
pull
=
vfp_gunzip_pull
,
};
/*--------------------------------------------------------------------
* VFP_GZIP
...
...
@@ -536,26 +539,9 @@ vfp_gzip_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
{
vg
=
VGZ_NewGzip
(
bo
->
vsl
,
"G F -"
);
XXXAZ
(
vgz_getmbuf
(
vg
));
vfe
->
priv1
=
vg
;
VGZ_Ibuf
(
vg
,
vg
->
m_buf
,
0
);
AZ
(
vg
->
m_len
);
vg
->
flag
=
VGZ_NORMAL
;
return
(
VFP_OK
);
}
if
(
p
==
vfp_fini
)
{
if
(
vfe
->
priv1
!=
NULL
)
{
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
vfe
->
priv1
=
NULL
;
(
void
)
VGZ_Destroy
(
&
vg
);
}
return
(
VFP_ERROR
);
}
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
AN
(
p
);
AN
(
lp
);
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
l
=
*
lp
;
*
lp
=
0
;
VGZ_Obuf
(
vg
,
p
,
l
);
...
...
@@ -588,10 +574,6 @@ vfp_gzip_pull(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
return
(
VFP_END
);
}
const
struct
vfp
vfp_gzip
=
{
.
pull
=
vfp_gzip_pull
,
};
/*--------------------------------------------------------------------
* VFP_TESTGZIP
*
...
...
@@ -611,21 +593,7 @@ vfp_testgunzip_pull(struct busyobj *bo, void *p, ssize_t *lp,
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
{
vg
=
VGZ_NewUngzip
(
bo
->
vsl
,
"u F -"
);
XXXAZ
(
vgz_getmbuf
(
vg
));
vfe
->
priv1
=
vg
;
AZ
(
vg
->
m_len
);
return
(
VFP_OK
);
}
if
(
p
==
vfp_fini
)
{
if
(
vfe
->
priv1
!=
NULL
)
{
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
vfe
->
priv1
=
NULL
;
(
void
)
VGZ_Destroy
(
&
vg
);
}
return
(
VFP_ERROR
);
}
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
AN
(
p
);
AN
(
lp
);
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
...
...
@@ -652,6 +620,46 @@ vfp_testgunzip_pull(struct busyobj *bo, void *p, ssize_t *lp,
return
(
vp
);
}
/*--------------------------------------------------------------------*/
static
void
__match_proto__
(
vfp_fini_f
)
vfp_gzip_fini
(
struct
busyobj
*
bo
,
struct
vfp_entry
*
vfe
)
{
struct
vgz
*
vg
;
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
vfe
->
priv1
!=
NULL
)
{
CAST_OBJ_NOTNULL
(
vg
,
vfe
->
priv1
,
VGZ_MAGIC
);
vfe
->
priv1
=
NULL
;
(
void
)
VGZ_Destroy
(
&
vg
);
}
}
/*--------------------------------------------------------------------*/
const
struct
vfp
vfp_gunzip
=
{
.
name
=
"GUNZIP"
,
.
init
=
vfp_gzip_init
,
.
pull
=
vfp_gunzip_pull
,
.
fini
=
vfp_gzip_fini
,
.
priv1
=
"U F -"
,
};
const
struct
vfp
vfp_gzip
=
{
.
name
=
"GZIP"
,
.
init
=
vfp_gzip_init
,
.
pull
=
vfp_gzip_pull
,
.
fini
=
vfp_gzip_fini
,
.
priv1
=
"G F -"
,
.
priv2
=
1
,
};
const
struct
vfp
vfp_testgunzip
=
{
.
name
=
"TESTGUNZIP"
,
.
init
=
vfp_gzip_init
,
.
pull
=
vfp_testgunzip_pull
,
.
fini
=
vfp_gzip_fini
,
.
priv1
=
"u F -"
,
};
bin/varnishd/cache/cache_http1_fetch.c
View file @
0783808a
...
...
@@ -77,10 +77,6 @@ v1f_pull_straight(struct busyobj *bo, void *p, ssize_t *lp,
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
return
(
VFP_OK
);
if
(
p
==
vfp_fini
)
return
(
VFP_ERROR
);
AN
(
p
);
AN
(
lp
);
...
...
@@ -103,6 +99,7 @@ v1f_pull_straight(struct busyobj *bo, void *p, ssize_t *lp,
}
static
const
struct
vfp
v1f_straight
=
{
.
name
=
"V1F_STRAIGHT"
,
.
pull
=
v1f_pull_straight
,
};
...
...
@@ -121,10 +118,6 @@ v1f_pull_chunked(struct busyobj *bo, void *p, ssize_t *lp,
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
return
(
VFP_OK
);
if
(
p
==
vfp_fini
)
return
(
VFP_ERROR
);
AN
(
p
);
AN
(
lp
);
...
...
@@ -142,6 +135,7 @@ v1f_pull_chunked(struct busyobj *bo, void *p, ssize_t *lp,
}
static
const
struct
vfp
v1f_chunked
=
{
.
name
=
"V1F_CHUNKED"
,
.
pull
=
v1f_pull_chunked
,
};
...
...
@@ -154,10 +148,6 @@ v1f_pull_eof(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
vfe
,
VFP_ENTRY_MAGIC
);
if
(
p
==
vfp_init
)
return
(
VFP_OK
);
if
(
p
==
vfp_fini
)
return
(
VFP_ERROR
);
AN
(
p
);
AN
(
lp
);
...
...
@@ -173,6 +163,7 @@ v1f_pull_eof(struct busyobj *bo, void *p, ssize_t *lp, struct vfp_entry *vfe)
}
static
const
struct
vfp
v1f_eof
=
{
.
name
=
"V1F_EOF"
,
.
pull
=
v1f_pull_eof
,
};
...
...
bin/varnishd/flint.lnt
View file @
0783808a
...
...
@@ -113,6 +113,7 @@
-sem(EXP_Inject, custodial(1))
-sem(WS_Init, custodial(2))
-sem(http_Setup, custodial(2))
-sem(vfp_esi_end, custodial(2))
-sem(vdi_dns_cache_list_add, custodial(3))
...
...
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