[master] 36520f2 Remove the global VUT symbol
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Wed Sep 13 22:21:05 UTC 2017
commit 36520f2db68123634fb414293d181d2f6721c476
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Tue Sep 5 11:26:09 2017 +0200
Remove the global VUT symbol
diff --git a/bin/varnishhist/varnishhist.c b/bin/varnishhist/varnishhist.c
index fe2df7a..7054b6d 100644
--- a/bin/varnishhist/varnishhist.c
+++ b/bin/varnishhist/varnishhist.c
@@ -57,6 +57,8 @@
#define HIST_N 2000 /* how far back we remember */
#define HIST_RES 100 /* bucket resolution */
+static struct VUT *vut;
+
static int hist_low;
static int hist_high;
static int hist_range;
@@ -368,7 +370,7 @@ accumulate(struct VSL_data *vsl, struct VSL_transaction * const pt[],
static int __match_proto__(VUT_cb_f)
sighup(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
quit = 1;
return (1);
}
@@ -470,7 +472,7 @@ usage(int status)
{
const char **opt;
- fprintf(stderr, "Usage: %s <options>\n\n", VUT.progname);
+ fprintf(stderr, "Usage: %s <options>\n\n", vut->progname);
fprintf(stderr, "Options:\n");
for (opt = vopt_spec.vopt_usage; *opt != NULL; opt += 2)
fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1));
@@ -488,7 +490,7 @@ profile_error(const char *s)
static void
vut_sighandler(int sig)
{
- VUT_Signaled(&VUT, sig);
+ VUT_Signaled(vut, sig);
}
int
@@ -502,7 +504,8 @@ main(int argc, char **argv)
struct profile cli_p = {0};
cli_p.name = 0;
- VUT_InitProg(argc, argv, &vopt_spec);
+ vut = VUT_InitProg(argc, argv, &vopt_spec);
+ AN(vut);
AZ(pthread_cond_init(&timebend_cv, NULL));
while ((i = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) {
@@ -565,7 +568,7 @@ main(int argc, char **argv)
" (invalid factor '%s')", optarg);
break;
default:
- if (!VUT_Arg(i, optarg))
+ if (!VUT_Arg(vut, i, optarg))
usage(1);
}
}
@@ -574,11 +577,11 @@ main(int argc, char **argv)
usage(1);
/* Check for valid grouping mode */
- assert(VUT.g_arg < VSL_g__MAX);
- if (VUT.g_arg != VSL_g_vxid && VUT.g_arg != VSL_g_request)
+ assert(vut->g_arg < VSL_g__MAX);
+ if (vut->g_arg != VSL_g_vxid && vut->g_arg != VSL_g_request)
VUT_Error(1, "Invalid grouping mode: %s"
" (only vxid and request are supported)",
- VSLQ_grouping[VUT.g_arg]);
+ VSLQ_grouping[vut->g_arg]);
if (profile) {
for (active_profile = profiles; active_profile->name;
@@ -593,7 +596,7 @@ main(int argc, char **argv)
assert(active_profile->VSL_arg == 'b' ||
active_profile->VSL_arg == 'c');
- assert(VUT_Arg(active_profile->VSL_arg, NULL));
+ assert(VUT_Arg(vut, active_profile->VSL_arg, NULL));
match_tag = active_profile->tag;
fnum = active_profile->field;
hist_low = active_profile->hist_low;
@@ -616,16 +619,16 @@ main(int argc, char **argv)
log_ten = log(10.0);
VUT_Signal(vut_sighandler);
- VUT_Setup();
- ident = VSM_Dup(VUT.vsm, "Arg", "-i");
+ VUT_Setup(vut);
+ ident = VSM_Dup(vut->vsm, "Arg", "-i");
if (pthread_create(&thr, NULL, do_curses, NULL) != 0)
VUT_Error(1, "pthread_create(): %s", strerror(errno));
- VUT.dispatch_f = accumulate;
- VUT.dispatch_priv = NULL;
- VUT.sighup_f = sighup;
- VUT_Main();
+ vut->dispatch_f = accumulate;
+ vut->dispatch_priv = NULL;
+ vut->sighup_f = sighup;
+ VUT_Main(vut);
end_of_file = 1;
AZ(pthread_join(thr, NULL));
- VUT_Fini();
+ VUT_Fini(&vut);
exit(0);
}
diff --git a/bin/varnishlog/varnishlog.c b/bin/varnishlog/varnishlog.c
index edabf63..6f6772b 100644
--- a/bin/varnishlog/varnishlog.c
+++ b/bin/varnishlog/varnishlog.c
@@ -50,6 +50,8 @@
#include "vut.h"
#include "miniobj.h"
+static struct VUT *vut;
+
static struct log {
/* Options */
int a_opt;
@@ -64,7 +66,7 @@ static void __attribute__((__noreturn__))
usage(int status)
{
const char **opt;
- fprintf(stderr, "Usage: %s <options>\n\n", VUT.progname);
+ fprintf(stderr, "Usage: %s <options>\n\n", vut->progname);
fprintf(stderr, "Options:\n");
for (opt = vopt_spec.vopt_usage; *opt != NULL; opt += 2)
fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1));
@@ -79,18 +81,18 @@ openout(int append)
if (LOG.A_opt)
LOG.fo = fopen(LOG.w_arg, append ? "a" : "w");
else
- LOG.fo = VSL_WriteOpen(VUT.vsl, LOG.w_arg, append, 0);
+ LOG.fo = VSL_WriteOpen(vut->vsl, LOG.w_arg, append, 0);
if (LOG.fo == NULL)
VUT_Error(2, "Cannot open output file (%s)",
- LOG.A_opt ? strerror(errno) : VSL_Error(VUT.vsl));
- VUT.dispatch_priv = LOG.fo;
+ LOG.A_opt ? strerror(errno) : VSL_Error(vut->vsl));
+ vut->dispatch_priv = LOG.fo;
}
static int __match_proto__(VUT_cb_f)
rotateout(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
AN(LOG.w_arg);
AN(LOG.fo);
fclose(LOG.fo);
@@ -103,8 +105,7 @@ static int __match_proto__(VUT_cb_f)
flushout(struct VUT *v)
{
- if (v != NULL)
- assert(v == &VUT);
+ assert(v == vut);
AN(LOG.fo);
if (fflush(LOG.fo))
return (-5);
@@ -114,14 +115,15 @@ flushout(struct VUT *v)
static int __match_proto__(VUT_cb_f)
sighup(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
return (1);
}
static void
vut_sighandler(int sig)
{
- VUT_Signaled(&VUT, sig);
+ AN(vut);
+ VUT_Signaled(vut, sig);
}
int
@@ -129,7 +131,8 @@ main(int argc, char * const *argv)
{
int opt;
- VUT_InitProg(argc, argv, &vopt_spec);
+ vut = VUT_InitProg(argc, argv, &vopt_spec);
+ AN(vut);
memset(&LOG, 0, sizeof LOG);
while ((opt = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) {
@@ -150,7 +153,7 @@ main(int argc, char * const *argv)
REPLACE(LOG.w_arg, optarg);
break;
default:
- if (!VUT_Arg(opt, optarg))
+ if (!VUT_Arg(vut, opt, optarg))
usage(1);
}
}
@@ -158,28 +161,28 @@ main(int argc, char * const *argv)
if (optind != argc)
usage(1);
- if (VUT.D_opt && !LOG.w_arg)
+ if (vut->D_opt && !LOG.w_arg)
VUT_Error(1, "Missing -w option");
/* Setup output */
if (LOG.A_opt || !LOG.w_arg)
- VUT.dispatch_f = VSL_PrintTransactions;
+ vut->dispatch_f = VSL_PrintTransactions;
else
- VUT.dispatch_f = VSL_WriteTransactions;
- VUT.sighup_f = sighup;
+ vut->dispatch_f = VSL_WriteTransactions;
+ vut->sighup_f = sighup;
if (LOG.w_arg) {
openout(LOG.a_opt);
AN(LOG.fo);
- if (VUT.D_opt)
- VUT.sighup_f = rotateout;
+ if (vut->D_opt)
+ vut->sighup_f = rotateout;
} else
LOG.fo = stdout;
- VUT.idle_f = flushout;
+ vut->idle_f = flushout;
VUT_Signal(vut_sighandler);
- VUT_Setup();
- VUT_Main();
- VUT_Fini();
+ VUT_Setup(vut);
+ VUT_Main(vut);
+ VUT_Fini(&vut);
(void)flushout(NULL);
diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 415691e..22391d1 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -70,6 +70,8 @@
#define TIME_FMT "[%d/%b/%Y:%T %z]"
#define FORMAT "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""
+static struct VUT *vut;
+
struct format;
enum e_frag {
@@ -164,7 +166,7 @@ usage(int status)
{
const char **opt;
- fprintf(stderr, "Usage: %s <options>\n\n", VUT.progname);
+ fprintf(stderr, "Usage: %s <options>\n\n", vut->progname);
fprintf(stderr, "Options:\n");
for (opt = vopt_spec.vopt_usage; *opt != NULL; opt += 2)
fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1));
@@ -186,7 +188,7 @@ static int __match_proto__(VUT_cb_f)
rotateout(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
AN(CTX.w_arg);
AN(CTX.fo);
fclose(CTX.fo);
@@ -199,7 +201,7 @@ static int __match_proto__(VUT_cb_f)
flushout(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
AN(CTX.fo);
if (fflush(CTX.fo))
return (-5);
@@ -1108,14 +1110,15 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
static int __match_proto__(VUT_cb_f)
sighup(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
return (1);
}
static void
vut_sighandler(int sig)
{
- VUT_Signaled(&VUT, sig);
+ AN(vut);
+ VUT_Signaled(vut, sig);
}
static char *
@@ -1152,7 +1155,8 @@ main(int argc, char * const *argv)
signed char opt;
char *format = NULL;
- VUT_InitProg(argc, argv, &vopt_spec);
+ vut = VUT_InitProg(argc, argv, &vopt_spec);
+ AN(vut);
memset(&CTX, 0, sizeof CTX);
VTAILQ_INIT(&CTX.format);
VTAILQ_INIT(&CTX.watch_vcl_log);
@@ -1200,7 +1204,7 @@ main(int argc, char * const *argv)
REPLACE(CTX.w_arg, optarg);
break;
default:
- if (!VUT_Arg(opt, optarg))
+ if (!VUT_Arg(vut, opt, optarg))
usage(1);
}
}
@@ -1211,14 +1215,14 @@ main(int argc, char * const *argv)
if (optind != argc)
usage(1);
- if (VUT.D_opt && !CTX.w_arg)
+ if (vut->D_opt && !CTX.w_arg)
VUT_Error(1, "Missing -w option");
/* Check for valid grouping mode */
- assert(VUT.g_arg < VSL_g__MAX);
- if (VUT.g_arg != VSL_g_vxid && VUT.g_arg != VSL_g_request)
+ assert(vut->g_arg < VSL_g__MAX);
+ if (vut->g_arg != VSL_g_vxid && vut->g_arg != VSL_g_request)
VUT_Error(1, "Invalid grouping mode: %s",
- VSLQ_grouping[VUT.g_arg]);
+ VSLQ_grouping[vut->g_arg]);
/* Prepare output format */
parse_format(format);
@@ -1226,22 +1230,22 @@ main(int argc, char * const *argv)
format = NULL;
/* Setup output */
- VUT.dispatch_f = dispatch_f;
- VUT.dispatch_priv = NULL;
- VUT.sighup_f = sighup;
+ vut->dispatch_f = dispatch_f;
+ vut->dispatch_priv = NULL;
+ vut->sighup_f = sighup;
if (CTX.w_arg) {
openout(CTX.a_opt);
AN(CTX.fo);
- if (VUT.D_opt)
- VUT.sighup_f = rotateout;
+ if (vut->D_opt)
+ vut->sighup_f = rotateout;
} else
CTX.fo = stdout;
- VUT.idle_f = flushout;
+ vut->idle_f = flushout;
VUT_Signal(vut_sighandler);
- VUT_Setup();
- VUT_Main();
- VUT_Fini();
+ VUT_Setup(vut);
+ VUT_Main(vut);
+ VUT_Fini(&vut);
exit(0);
}
diff --git a/bin/varnishstat/varnishstat.c b/bin/varnishstat/varnishstat.c
index a13ce61..7d02906 100644
--- a/bin/varnishstat/varnishstat.c
+++ b/bin/varnishstat/varnishstat.c
@@ -50,6 +50,8 @@
#include "varnishstat.h"
+static struct VUT *vut;
+
/*--------------------------------------------------------------------*/
static int __match_proto__(VSC_iter_f)
@@ -242,7 +244,7 @@ usage(int status)
{
const char **opt;
- fprintf(stderr, "Usage: %s <options>\n\n", VUT.progname);
+ fprintf(stderr, "Usage: %s <options>\n\n", vut->progname);
fprintf(stderr, "Options:\n");
for (opt = vopt_spec.vopt_usage; *opt != NULL; opt +=2)
fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1));
@@ -258,7 +260,8 @@ main(int argc, char * const *argv)
int i;
struct vsc *vsc;
- VUT_InitProg(argc, argv, &vopt_spec);
+ vut = VUT_InitProg(argc, argv, &vopt_spec);
+ AN(vut);
vd = VSM_New();
AN(vd);
vsc = VSC_New();
@@ -285,7 +288,7 @@ main(int argc, char * const *argv)
AN(VSC_Arg(vsc, opt, optarg));
break;
case 'V':
- AN(VUT_Arg(opt, optarg));
+ AN(VUT_Arg(vut, opt, optarg));
break;
default:
i = VSM_Arg(vd, opt, optarg);
diff --git a/bin/varnishtop/varnishtop.c b/bin/varnishtop/varnishtop.c
index 85d8dab..09d939f 100644
--- a/bin/varnishtop/varnishtop.c
+++ b/bin/varnishtop/varnishtop.c
@@ -60,6 +60,8 @@
#define AC(x) x
#endif
+static struct VUT *vut;
+
struct top {
uint8_t tag;
const char *rec_data;
@@ -180,7 +182,7 @@ accumulate(struct VSL_data *vsl, struct VSL_transaction * const pt[],
static int __match_proto__(VUT_cb_f)
sighup(struct VUT *v)
{
- assert(v == &VUT);
+ assert(v == vut);
quit = 1;
return (1);
}
@@ -188,7 +190,8 @@ sighup(struct VUT *v)
static void
vut_sighandler(int sig)
{
- VUT_Signaled(&VUT, sig);
+ AN(vut);
+ VUT_Signaled(vut, sig);
}
static void
@@ -324,7 +327,7 @@ usage(int status)
{
const char **opt;
- fprintf(stderr, "Usage: %s <options>\n\n", VUT.progname);
+ fprintf(stderr, "Usage: %s <options>\n\n", vut->progname);
fprintf(stderr, "Options:\n");
for (opt = vopt_spec.vopt_usage; *opt != NULL; opt +=2)
fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1));
@@ -337,12 +340,13 @@ main(int argc, char **argv)
int o, once = 0;
pthread_t thr;
- VUT_InitProg(argc, argv, &vopt_spec);
+ vut = VUT_InitProg(argc, argv, &vopt_spec);
+ AN(vut);
while ((o = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) {
switch (o) {
case '1':
- AN(VUT_Arg('d', NULL));
+ AN(VUT_Arg(vut, 'd', NULL));
once = 1;
break;
case 'f':
@@ -361,7 +365,7 @@ main(int argc, char **argv)
}
break;
default:
- if (!VUT_Arg(o, optarg))
+ if (!VUT_Arg(vut, o, optarg))
usage(1);
}
}
@@ -370,8 +374,8 @@ main(int argc, char **argv)
usage(1);
VUT_Signal(vut_sighandler);
- VUT_Setup();
- ident = VSM_Dup(VUT.vsm, "Arg", "-i");
+ VUT_Setup(vut);
+ ident = VSM_Dup(vut->vsm, "Arg", "-i");
if (!once) {
if (pthread_create(&thr, NULL, do_curses, NULL) != 0) {
fprintf(stderr, "pthread_create(): %s\n",
@@ -379,15 +383,15 @@ main(int argc, char **argv)
exit(1);
}
}
- VUT.dispatch_f = accumulate;
- VUT.dispatch_priv = NULL;
- VUT.sighup_f = sighup;
- VUT_Main();
+ vut->dispatch_f = accumulate;
+ vut->dispatch_priv = NULL;
+ vut->sighup_f = sighup;
+ VUT_Main(vut);
end_of_file = 1;
if (once)
dump();
else
pthread_join(thr, NULL);
- VUT_Fini();
+ VUT_Fini(&vut);
exit(0);
}
diff --git a/include/vut.h b/include/vut.h
index 1fbe755..2e3a3c7 100644
--- a/include/vut.h
+++ b/include/vut.h
@@ -64,22 +64,20 @@ struct VUT {
void *dispatch_priv;
};
-extern struct VUT VUT;
-
//lint -sem(VUT_Error, r_no)
void VUT_Error(int status, const char *fmt, ...)
__v_printflike(2, 3) __attribute__((__noreturn__));
-int VUT_Arg(int opt, const char *arg);
+int VUT_Arg(struct VUT *, int opt, const char *arg);
#define VUT_InitProg(argc, argv, spec) VUT_Init(argv[0], argc, argv, spec)
-void VUT_Init(const char *progname, int argc, char * const *argv,
+struct VUT * VUT_Init(const char *progname, int argc, char * const *argv,
const struct vopt_spec *);
void VUT_Signal(VUT_sighandler_f);
void VUT_Signaled(struct VUT *, int);
-void VUT_Setup(void);
-int VUT_Main(void);
-void VUT_Fini(void);
+void VUT_Setup(struct VUT *);
+int VUT_Main(struct VUT *);
+void VUT_Fini(struct VUT **);
diff --git a/lib/libvarnishapi/libvarnishapi.map b/lib/libvarnishapi/libvarnishapi.map
index 4f23dc5..7454f4f 100644
--- a/lib/libvarnishapi/libvarnishapi.map
+++ b/lib/libvarnishapi/libvarnishapi.map
@@ -127,7 +127,6 @@ LIBVARNISHAPI_2.0 {
VTIM_timeval;
# vut.c
- VUT;
VUT_Arg;
VUT_Error;
VUT_Fini;
diff --git a/lib/libvarnishapi/vut.c b/lib/libvarnishapi/vut.c
index 5bd24d4..6103e9c 100644
--- a/lib/libvarnishapi/vut.c
+++ b/lib/libvarnishapi/vut.c
@@ -56,8 +56,6 @@
#include "vapi/voptget.h"
-struct VUT VUT;
-
static int vut_synopsis(const struct vopt_spec *);
static int vut_options(const struct vopt_spec *);
@@ -86,16 +84,18 @@ static int __match_proto__(VSLQ_dispatch_f)
vut_dispatch(struct VSL_data *vsl, struct VSL_transaction * const trans[],
void *priv)
{
+ struct VUT *vut;
int i;
- (void)priv;
- if (VUT.k_arg == 0)
+ vut = priv;
+ AN(vut);
+ if (vut->k_arg == 0)
return (-1); /* End of file */
- AN(VUT.dispatch_f);
- i = VUT.dispatch_f(vsl, trans, VUT.dispatch_priv);
- if (VUT.k_arg > 0)
- VUT.k_arg--;
- if (i >= 0 && VUT.k_arg == 0)
+ AN(vut->dispatch_f);
+ i = vut->dispatch_f(vsl, trans, vut->dispatch_priv);
+ if (vut->k_arg > 0)
+ vut->k_arg--;
+ if (i >= 0 && vut->k_arg == 0)
return (-1); /* End of file */
return (i);
}
@@ -116,7 +116,7 @@ VUT_Error(int status, const char *fmt, ...)
}
int
-VUT_Arg(int opt, const char *arg)
+VUT_Arg(struct VUT *vut, int opt, const char *arg)
{
int i;
char *p;
@@ -124,86 +124,90 @@ VUT_Arg(int opt, const char *arg)
switch (opt) {
case 'd':
/* Head */
- VUT.d_opt = 1;
+ vut->d_opt = 1;
return (1);
case 'D':
/* Daemon mode */
- VUT.D_opt = 1;
+ vut->D_opt = 1;
return (1);
case 'g':
/* Grouping */
AN(arg);
- VUT.g_arg = VSLQ_Name2Grouping(arg, -1);
- if (VUT.g_arg == -2)
+ vut->g_arg = VSLQ_Name2Grouping(arg, -1);
+ if (vut->g_arg == -2)
VUT_Error(1, "Ambiguous grouping type: %s", arg);
- else if (VUT.g_arg < 0)
+ else if (vut->g_arg < 0)
VUT_Error(1, "Unknown grouping type: %s", arg);
return (1);
case 'k':
/* Log transaction limit */
AN(arg);
- VUT.k_arg = (int)strtol(arg, &p, 10);
- if (*p != '\0' || VUT.k_arg <= 0)
+ vut->k_arg = (int)strtol(arg, &p, 10);
+ if (*p != '\0' || vut->k_arg <= 0)
VUT_Error(1, "-k: Invalid number '%s'", arg);
return (1);
case 'n':
/* Varnish instance name */
AN(arg);
- REPLACE(VUT.n_arg, arg);
+ REPLACE(vut->n_arg, arg);
return (1);
case 'P':
/* PID file */
AN(arg);
- REPLACE(VUT.P_arg, arg);
+ REPLACE(vut->P_arg, arg);
return (1);
case 'q':
/* Query to use */
AN(arg);
- REPLACE(VUT.q_arg, arg);
+ REPLACE(vut->q_arg, arg);
return (1);
case 'r':
/* Binary file input */
AN(arg);
- REPLACE(VUT.r_arg, arg);
+ REPLACE(vut->r_arg, arg);
return (1);
case 't':
/* VSM connect timeout */
- REPLACE(VUT.t_arg, arg);
+ REPLACE(vut->t_arg, arg);
return (1);
case 'V':
/* Print version number and exit */
- VCS_Message(VUT.progname);
+ VCS_Message(vut->progname);
exit(0);
default:
- AN(VUT.vsl);
- i = VSL_Arg(VUT.vsl, opt, arg);
+ AN(vut->vsl);
+ i = VSL_Arg(vut->vsl, opt, arg);
if (i < 0)
- VUT_Error(1, "%s", VSL_Error(VUT.vsl));
+ VUT_Error(1, "%s", VSL_Error(vut->vsl));
return (i);
}
}
-void
+struct VUT *
VUT_Init(const char *progname, int argc, char * const *argv,
const struct vopt_spec *voc)
{
+ struct VUT *vut;
AN(progname);
AN(argv);
AN(voc);
- AZ(VUT.progname);
+
+ vut = calloc(1, sizeof *vut);
+ AN(vut);
if (argc == 2 && !strcmp(argv[1], "--synopsis"))
exit(vut_synopsis(voc));
if (argc == 2 && !strcmp(argv[1], "--options"))
exit(vut_options(voc));
- VUT.progname = progname;
- VUT.g_arg = VSL_g_vxid;
- AZ(VUT.vsl);
- VUT.vsl = VSL_New();
- AN(VUT.vsl);
- VUT.k_arg = -1;
+ vut->progname = progname;
+ vut->g_arg = VSL_g_vxid;
+ AZ(vut->vsl);
+ vut->vsl = VSL_New();
+ AN(vut->vsl);
+ vut->k_arg = -1;
+ return (vut);
}
void
@@ -228,59 +232,60 @@ VUT_Signaled(struct VUT *vut, int sig)
}
void
-VUT_Setup(void)
+VUT_Setup(struct VUT *vut)
{
struct VSL_cursor *c;
- AN(VUT.vsl);
- AZ(VUT.vsm);
- AZ(VUT.vslq);
+ AN(vut);
+ AN(vut->vsl);
+ AZ(vut->vsm);
+ AZ(vut->vslq);
/* Check input arguments (2 used for bug in FlexeLint) */
- if ((VUT.n_arg == NULL ? 0 : 2) +
- (VUT.r_arg == NULL ? 0 : 2) > 2)
+ if ((vut->n_arg == NULL ? 0 : 2) +
+ (vut->r_arg == NULL ? 0 : 2) > 2)
VUT_Error(1, "Only one of -n and -r options may be used");
/* Create and validate the query expression */
- VUT.vslq = VSLQ_New(VUT.vsl, NULL, VUT.g_arg, VUT.q_arg);
- if (VUT.vslq == NULL)
+ vut->vslq = VSLQ_New(vut->vsl, NULL, vut->g_arg, vut->q_arg);
+ if (vut->vslq == NULL)
VUT_Error(1, "Query expression error:\n%s",
- VSL_Error(VUT.vsl));
+ VSL_Error(vut->vsl));
/* Setup input */
- if (VUT.r_arg) {
- c = VSL_CursorFile(VUT.vsl, VUT.r_arg, 0);
+ if (vut->r_arg) {
+ c = VSL_CursorFile(vut->vsl, vut->r_arg, 0);
if (c == NULL)
- VUT_Error(1, "%s", VSL_Error(VUT.vsl));
- VSLQ_SetCursor(VUT.vslq, &c);
+ VUT_Error(1, "%s", VSL_Error(vut->vsl));
+ VSLQ_SetCursor(vut->vslq, &c);
AZ(c);
} else {
- VUT.vsm = VSM_New();
- AN(VUT.vsm);
- if (VUT.n_arg && VSM_Arg(VUT.vsm, 'n', VUT.n_arg) <= 0)
- VUT_Error(1, "%s", VSM_Error(VUT.vsm));
- if (VUT.t_arg && VSM_Arg(VUT.vsm, 't', VUT.t_arg) <= 0)
- VUT_Error(1, "%s", VSM_Error(VUT.vsm));
- if (VSM_Attach(VUT.vsm, STDERR_FILENO))
- VUT_Error(1, "VSM: %s", VSM_Error(VUT.vsm));
+ vut->vsm = VSM_New();
+ AN(vut->vsm);
+ if (vut->n_arg && VSM_Arg(vut->vsm, 'n', vut->n_arg) <= 0)
+ VUT_Error(1, "%s", VSM_Error(vut->vsm));
+ if (vut->t_arg && VSM_Arg(vut->vsm, 't', vut->t_arg) <= 0)
+ VUT_Error(1, "%s", VSM_Error(vut->vsm));
+ if (VSM_Attach(vut->vsm, STDERR_FILENO))
+ VUT_Error(1, "VSM: %s", VSM_Error(vut->vsm));
// Cursor is handled in VUT_Main()
}
/* Open PID file */
- if (VUT.P_arg) {
+ if (vut->P_arg) {
if (pfh != NULL)
VUT_Error(1, "PID file already created");
- pfh = VPF_Open(VUT.P_arg, 0644, NULL);
+ pfh = VPF_Open(vut->P_arg, 0644, NULL);
if (pfh == NULL)
- VUT_Error(1, "%s: %s", VUT.P_arg, strerror(errno));
+ VUT_Error(1, "%s: %s", vut->P_arg, strerror(errno));
}
/* Daemon mode */
- if (VUT.D_opt && vut_daemon() == -1)
+ if (vut->D_opt && vut_daemon() == -1)
VUT_Error(1, "Daemon mode: %s", strerror(errno));
/* Write PID and setup exit handler */
- if (VUT.P_arg) {
+ if (vut->P_arg) {
AN(pfh);
AZ(VPF_Write(pfh));
AZ(atexit(vut_vpf_remove));
@@ -288,89 +293,98 @@ VUT_Setup(void)
}
void
-VUT_Fini(void)
+VUT_Fini(struct VUT **vutp)
{
- AN(VUT.progname);
+ struct VUT *vut;
+
+ AN(vutp);
+ vut = *vutp;
+ *vutp = NULL;
- free(VUT.n_arg);
- free(VUT.P_arg);
- free(VUT.q_arg);
- free(VUT.r_arg);
- free(VUT.t_arg);
+ AN(vut);
+ AN(vut->progname);
+
+ free(vut->n_arg);
+ free(vut->P_arg);
+ free(vut->q_arg);
+ free(vut->r_arg);
+ free(vut->t_arg);
vut_vpf_remove();
AZ(pfh);
- if (VUT.vslq)
- VSLQ_Delete(&VUT.vslq);
- if (VUT.vsl)
- VSL_Delete(VUT.vsl);
- if (VUT.vsm)
- VSM_Destroy(&VUT.vsm);
+ if (vut->vslq)
+ VSLQ_Delete(&vut->vslq);
+ if (vut->vsl)
+ VSL_Delete(vut->vsl);
+ if (vut->vsm)
+ VSM_Destroy(&vut->vsm);
- memset(&VUT, 0, sizeof VUT);
+ memset(vut, 0, sizeof *vut);
+ free(vut);
}
int
-VUT_Main(void)
+VUT_Main(struct VUT *vut)
{
struct VSL_cursor *c;
int i = -1;
int hascursor = -1;
- AN(VUT.vslq);
+ AN(vut);
+ AN(vut->vslq);
- while (!VUT.sigint) {
- if (VUT.sighup && VUT.sighup_f) {
+ while (!vut->sigint) {
+ if (vut->sighup && vut->sighup_f) {
/* sighup callback */
- VUT.sighup = 0;
- i = VUT.sighup_f(&VUT);
+ vut->sighup = 0;
+ i = vut->sighup_f(vut);
if (i)
break;
}
- if (VUT.sigusr1) {
+ if (vut->sigusr1) {
/* Flush and report any incomplete records */
- VUT.sigusr1 = 0;
- (void)VSLQ_Flush(VUT.vslq, vut_dispatch, NULL);
+ vut->sigusr1 = 0;
+ (void)VSLQ_Flush(vut->vslq, vut_dispatch, vut);
}
// We must repeatedly call VSM_Status() when !hascursor
// to make VSM discover our segment.
- if (VUT.vsm != NULL &&
- (VSM_Status(VUT.vsm) & VSM_WRK_RESTARTED)) {
+ if (vut->vsm != NULL &&
+ (VSM_Status(vut->vsm) & VSM_WRK_RESTARTED)) {
if (hascursor < 1) {
fprintf(stderr, "Log abandonned\n");
- VSLQ_SetCursor(VUT.vslq, NULL);
+ VSLQ_SetCursor(vut->vslq, NULL);
hascursor = 0;
}
}
- if (VUT.vsm != NULL && hascursor < 1) {
+ if (vut->vsm != NULL && hascursor < 1) {
/* Reconnect VSM */
- AZ(VUT.r_arg);
+ AZ(vut->r_arg);
VTIM_sleep(0.1);
- c = VSL_CursorVSM(VUT.vsl, VUT.vsm,
- (VUT.d_opt ? VSL_COPT_TAILSTOP : VSL_COPT_TAIL)
+ c = VSL_CursorVSM(vut->vsl, vut->vsm,
+ (vut->d_opt ? VSL_COPT_TAILSTOP : VSL_COPT_TAIL)
| VSL_COPT_BATCH);
if (c == NULL) {
- VSL_ResetError(VUT.vsl);
+ VSL_ResetError(vut->vsl);
continue;
}
if (hascursor >= 0)
fprintf(stderr, "Log reacquired\n");
hascursor = 1;
- VSLQ_SetCursor(VUT.vslq, &c);
+ VSLQ_SetCursor(vut->vslq, &c);
AZ(c);
}
- i = VSLQ_Dispatch(VUT.vslq, vut_dispatch, NULL);
+ i = VSLQ_Dispatch(vut->vslq, vut_dispatch, vut);
if (i == 1)
/* Call again */
continue;
else if (i == 0) {
/* Nothing to do but wait */
- if (VUT.idle_f) {
- i = VUT.idle_f(&VUT);
+ if (vut->idle_f) {
+ i = vut->idle_f(vut);
if (i)
break;
}
@@ -381,17 +395,17 @@ VUT_Main(void)
break;
}
- if (VUT.vsm == NULL)
+ if (vut->vsm == NULL)
break;
/* XXX: Make continuation optional */
- (void)VSLQ_Flush(VUT.vslq, vut_dispatch, NULL);
+ (void)VSLQ_Flush(vut->vslq, vut_dispatch, vut);
if (i == -2) {
/* Abandoned */
fprintf(stderr, "Log abandoned\n");
- VSLQ_SetCursor(VUT.vslq, NULL);
+ VSLQ_SetCursor(vut->vslq, NULL);
hascursor = 0;
} else if (i < -2)
/* Overrun */
More information about the varnish-commit
mailing list