From: des Date: Tue, 20 Nov 2007 14:55:49 +0000 (+0000) Subject: Make SIGHUP work: VSL_Dispatch() will not return as long as it has data X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06b5e7f41203386c62285ec400ab30b72f9fedcc;p=varnish Make SIGHUP work: VSL_Dispatch() will not return as long as it has data to feed to h_ncsa(), so it is up to h_ncsa() to interrupt it if reopen is non-zero. Also remove a superfluous call to VSL_Arg() as was previously done in varnishlog(1). git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2270 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishncsa/varnishncsa.c b/varnish-cache/bin/varnishncsa/varnishncsa.c index f3c2fe7f..4d90f429 100644 --- a/varnish-cache/bin/varnishncsa/varnishncsa.c +++ b/varnish-cache/bin/varnishncsa/varnishncsa.c @@ -80,6 +80,8 @@ #include "shmlog.h" #include "varnishapi.h" +static volatile sig_atomic_t reopen; + static struct logline { char *df_H; /* %H, Protocol version */ char *df_Host; /* %{Host}i */ @@ -187,7 +189,7 @@ h_ncsa(void *priv, enum shmlogtag tag, unsigned fd, end = ptr + len; if (!(spec & VSL_S_CLIENT || spec & VSL_S_BACKEND)) - return (0); + return (reopen); if (fd >= nll) { struct logline **newll = ll; @@ -315,11 +317,11 @@ h_ncsa(void *priv, enum shmlogtag tag, unsigned fd, } if ((spec & VSL_S_CLIENT) && tag != SLT_ReqEnd) - return (0); + return (reopen); if ((spec & VSL_S_BACKEND) && tag != SLT_BackendReuse && (tag != SLT_BackendClose || lp->df_Uq)) - return (0); + return (reopen); if (tag == SLT_ReqEnd) { if (sscanf(ptr, "%*u %*u.%*u %ld.", &l) != 1) @@ -407,13 +409,11 @@ h_ncsa(void *priv, enum shmlogtag tag, unsigned fd, #undef freez lp->bogus = 0; - return (0); + return (reopen); } /*--------------------------------------------------------------------*/ -static volatile sig_atomic_t reopen; - static void sighup(int sig) { @@ -447,7 +447,7 @@ usage(void) int main(int argc, char *argv[]) { - int i, c; + int c; int a_flag = 0, D_flag = 0; const char *n_arg = NULL; const char *P_arg = NULL; @@ -459,11 +459,6 @@ main(int argc, char *argv[]) vd = VSL_New(); while ((c = getopt(argc, argv, VSL_ARGS "aDn:P:Vw:")) != -1) { - i = VSL_Arg(vd, c, optarg); - if (i < 0) - exit (1); - if (i > 0) - continue; switch (c) { case 'a': a_flag = 1; @@ -516,7 +511,7 @@ main(int argc, char *argv[]) of = stdout; } - while (VSL_Dispatch(vd, h_ncsa, of) == 0) { + while (VSL_Dispatch(vd, h_ncsa, of) >= 0) { if (fflush(of) != 0) { perror(w_arg); exit(1);