diff --git a/.cvsignore b/.cvsignore index 78f7b41..2eea188 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -varnish-2.0-beta1.tar.gz +varnish-2.0.tar.gz diff --git a/sources b/sources index 64d15c6..0530707 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -66582fd4baa3f7fb91727fa27f41aa94 varnish-2.0-beta1.tar.gz +4149b7220907ec90fd8047a90775ecac varnish-2.0.tar.gz diff --git a/varnish.ppc_pagesize.patch b/varnish.ppc_pagesize.patch new file mode 100644 index 0000000..56905ef --- /dev/null +++ b/varnish.ppc_pagesize.patch @@ -0,0 +1,24 @@ +diff -Naur ../varnish-2.0-beta2.orig/lib/libjemalloc/jemalloc_linux.c ./lib/libjemalloc/jemalloc_linux.c +--- ../varnish-2.0-beta2.orig/lib/libjemalloc/jemalloc_linux.c 2008-09-24 20:05:19.000000000 +0200 ++++ ./lib/libjemalloc/jemalloc_linux.c 2008-10-06 14:13:28.950350627 +0200 +@@ -257,7 +257,7 @@ + # define NO_TLS + #endif + #ifdef __powerpc__ +-# define PAGESIZE_2POW 12 ++# define PAGESIZE_2POW 16 + # define QUANTUM_2POW 4 + # define SIZEOF_PTR_2POW 2 + #endif +diff -Naur ../varnish-2.0-beta2.orig/lib/libjemalloc/malloc.c ./lib/libjemalloc/malloc.c +--- ../varnish-2.0-beta2.orig/lib/libjemalloc/malloc.c 2008-09-24 20:05:19.000000000 +0200 ++++ ./lib/libjemalloc/malloc.c 2008-10-06 14:13:42.023005090 +0200 +@@ -261,7 +261,7 @@ + # define NO_TLS + #endif + #ifdef __powerpc__ +-# define PAGESIZE_2POW 12 ++# define PAGESIZE_2POW 16 + # define QUANTUM_2POW 4 + # define SIZEOF_PTR_2POW 2 + #endif diff --git a/varnish.spec b/varnish.spec index be7db6f..6bb8bc4 100644 --- a/varnish.spec +++ b/varnish.spec @@ -1,18 +1,11 @@ Summary: Varnish is a high-performance HTTP accelerator Name: varnish Version: 2.0 -Release: 0.8.beta1%{?dist} +Release: 1%{?dist} License: BSD Group: System Environment/Daemons URL: http://www.varnish-cache.org/ -#Source0: http://varnish.projects.linpro.no/static/varnish-cache.tar.gz -#Source0: http://downloads.sourceforge.net/varnish/varnish-%{version}.tar.gz -Source0: http://downloads.sourceforge.net/varnish/varnish-2.0-beta1.tar.gz -Patch0: varnish.lockfile.patch -Patch1: varnish.coresize.patch -Patch2: varnish.vcl_changes.patch -Patch3: varnish.cs3157.patch -Patch4: varnish.endianfix.cs3170-3071.patch +Source0: http://downloads.sourceforge.net/varnish/varnish-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # The svn sources needs autoconf, automake and libtool to generate a suitable # configure script. Release tarballs would not need this @@ -67,18 +60,12 @@ Varnish is a high-performance HTTP accelerator #Varnish is a high-performance HTTP accelerator %prep -#%setup -q -%setup -q -n varnish-2.0-beta1 - -%patch0 -p0 -%patch1 -p0 -%patch2 -p0 -%patch3 -p0 -%patch4 -p0 +%setup -q +#%setup -q -n varnish-cache # The svn sources needs to generate a suitable configure script # Release tarballs would not need this -# ./autogen.sh +#./autogen.sh # Hack to get 32- and 64-bits tests run concurrently on the same build machine case `uname -m` in @@ -101,12 +88,17 @@ cp bin/varnishd/default.vcl etc/zope-plone.vcl examples %build # Remove "--disable static" if you want to build static libraries +# jemalloc is not compatible with Red Hat's ppc64 RHEL5 kernel koji server :-( +%ifarch ppc64 ppc +%configure --disable-static --localstatedir=/var/lib --disable-jemalloc +%else %configure --disable-static --localstatedir=/var/lib +%endif # We have to remove rpath - not allowed in Fedora # (This problem only visible on 64 bit arches) sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g; - s|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool + s|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool %{__make} %{?_smp_mflags} @@ -121,14 +113,16 @@ EOF tail -n +11 etc/default.vcl >> redhat/default.vcl -%if "%dist" == "el4" - sed -i 's,--pidfile \$pidfile,,g; - s,status -p \$pidfile,status,g; - s,killproc -p \$pidfile,killproc,g' \ - redhat/varnish.initrc redhat/varnishlog.initrc +%if 0%{?fedora}%{?rhel} == 0 || 0%{?rhel} <= 4 && 0%{?fedora} <= 8 + # Old style daemon function + sed -i 's,--pidfile \$pidfile,,g; + s,status -p \$pidfile,status,g; + s,killproc -p \$pidfile,killproc,g' \ + redhat/varnish.initrc redhat/varnishlog.initrc redhat/varnishncsa.initrc %endif %check +LD_LIBRARY_PATH="lib/libvarnish/.libs:lib/libvarnishcompat/.libs:lib/libvarnishapi/.libs:lib/libvcl/.libs" bin/varnishd/varnishd -b 127.0.0.1:80 -C -n /tmp/foo %{__make} check LD_LIBRARY_PATH="../../lib/libvarnish/.libs:../../lib/libvarnishcompat/.libs:../../lib/libvarnishapi/.libs:../../lib/libvcl/.libs" %install @@ -149,6 +143,7 @@ mkdir -p %{buildroot}/var/run/varnish %{__install} -D -m 0644 redhat/varnish.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/varnish %{__install} -D -m 0755 redhat/varnish.initrc %{buildroot}%{_initrddir}/varnish %{__install} -D -m 0755 redhat/varnishlog.initrc %{buildroot}%{_initrddir}/varnishlog +%{__install} -D -m 0755 redhat/varnishncsa.initrc %{buildroot}%{_initrddir}/varnishncsa %clean rm -rf %{buildroot} @@ -169,6 +164,7 @@ rm -rf %{buildroot} %config(noreplace) %{_sysconfdir}/logrotate.d/varnish %{_initrddir}/varnish %{_initrddir}/varnishlog +%{_initrddir}/varnishncsa %files libs %defattr(-,root,root,-) @@ -200,26 +196,23 @@ rm -rf %{buildroot} %pre getent group varnish >/dev/null || groupadd -r varnish getent passwd varnish >/dev/null || \ - useradd -r -g varnish -d /var/lib/varnish -s /sbin/nologin \ - -c "Varnish http accelerator user" varnish + useradd -r -g varnish -d /var/lib/varnish -s /sbin/nologin \ + -c "Varnish http accelerator user" varnish exit 0 %post /sbin/chkconfig --add varnish /sbin/chkconfig --add varnishlog +/sbin/chkconfig --add varnishncsa %preun if [ $1 -lt 1 ]; then /sbin/service varnish stop > /dev/null 2>&1 /sbin/service varnishlog stop > /dev/null 2>&1 + /sbin/service varnishncsa stop > /dev/null 2>%1 /sbin/chkconfig --del varnish /sbin/chkconfig --del varnishlog -fi - -%postun -if [ $1 -ge 1 ]; then - /sbin/service varnish condrestart > /dev/null 2>&1 - /sbin/service varnishlog condrestart > /dev/null 2>&1 + /sbin/chkconfig --del varnishncsa fi %post libs -p /sbin/ldconfig @@ -227,6 +220,25 @@ fi %postun libs -p /sbin/ldconfig %changelog +* Wed Oct 15 2008 Ingvar Hagelund - 2.0-1 +- 2.0 released. New upstream sources +- Disabled jemalloc on ppc and ppc64. Added a note in README.redhat. +- Synced to upstream again. No more patches needed. + +* Wed Oct 08 2008 Ingvar Hagelund - 2.0-0.11.rc1 +- 2.0-rc1 released. New upstream sources +- Added a patch for pagesize to match redhat's rhel5 ppc64 koji build boxes +- Added a patch for test a00008, from r3269 +- Removed condrestart in postscript at upgrade. We don't want that. + +* Fri Sep 26 2008 Ingvar Hagelund - 2.0-0.10.beta2 +- 2.0-beta2 released. New upstream sources +- Whitespace changes to make rpmlint more happy + +* Fri Sep 12 2008 Ingvar Hagelund - 2.0-0.9.20080912svn3184 +- Added varnisnsca init script (Colin Hill) +- Corrected varnishlog init script (Colin Hill) + * Tue Sep 09 2008 Ingvar Hagelund - 2.0-0.8.beta1 - Added a patch from r3171 that fixes an endian bug on ppc and ppc64 - Added a hack that changes the varnishtest ports for 64bits builds, diff --git a/varnish.varnishtest_rc1-3273.patch b/varnish.varnishtest_rc1-3273.patch new file mode 100644 index 0000000..2f40069 --- /dev/null +++ b/varnish.varnishtest_rc1-3273.patch @@ -0,0 +1,781 @@ +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/Makefile.in bin/varnishtest/Makefile.in +--- ../varnish-2.0-rc1/bin/varnishtest/Makefile.in 2008-10-08 13:39:45.000000000 +0200 ++++ bin/varnishtest/Makefile.in 2008-10-09 20:05:13.000000000 +0200 +@@ -96,7 +96,6 @@ + DEFS = @DEFS@ + DEPDIR = @DEPDIR@ + DL_LIBS = @DL_LIBS@ +-DSYMUTIL = @DSYMUTIL@ + ECHO = @ECHO@ + ECHO_C = @ECHO_C@ + ECHO_N = @ECHO_N@ +@@ -123,7 +122,6 @@ + MAKEINFO = @MAKEINFO@ + MKDIR_P = @MKDIR_P@ + NET_LIBS = @NET_LIBS@ +-NMEDIT = @NMEDIT@ + OBJEXT = @OBJEXT@ + PACKAGE = @PACKAGE@ + PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/tests/a00008.vtc bin/varnishtest/tests/a00008.vtc +--- ../varnish-2.0-rc1/bin/varnishtest/tests/a00008.vtc 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/tests/a00008.vtc 2008-10-09 13:49:15.000000000 +0200 +@@ -1,4 +1,4 @@ +-# $Id: a00008.vtc 3012 2008-07-24 12:22:35Z des $ ++# $Id: a00008.vtc 3272 2008-10-09 11:39:24Z phk $ + + test "Sema operations" + +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc.c bin/varnishtest/vtc.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc.c 3243 2008-10-05 10:22:21Z phk $ ++ * $Id: vtc.c 3272 2008-10-09 11:39:24Z phk $ + */ + + #include +@@ -41,7 +41,8 @@ + #define MAX_FILESIZE (1024 * 1024) + #define MAX_TOKENS 100 + +-static struct vtclog *vl; ++const char *vtc_file; ++char *vtc_desc; + + /********************************************************************** + * Read a file into memory +@@ -80,7 +81,7 @@ + */ + + void +-parse_string(char *buf, const struct cmds *cmd, void *priv) ++parse_string(char *buf, const struct cmds *cmd, void *priv, struct vtclog *vl) + { + char *token_s[MAX_TOKENS], *token_e[MAX_TOKENS]; + char *p, *q; +@@ -183,7 +184,7 @@ + } + + assert(cp->cmd != NULL); +- cp->cmd(token_s, priv, cmd); ++ cp->cmd(token_s, priv, cmd, vl); + } + } + +@@ -196,7 +197,7 @@ + { + + for (; cmd->name != NULL; cmd++) +- cmd->cmd(NULL, NULL, NULL); ++ cmd->cmd(NULL, NULL, NULL, NULL); + } + + /********************************************************************** +@@ -209,6 +210,7 @@ + + (void)priv; + (void)cmd; ++ (void)vl; + + if (av == NULL) + return; +@@ -216,6 +218,7 @@ + + printf("# TEST %s\n", av[1]); + AZ(av[2]); ++ vtc_desc = strdup(av[1]); + } + + /********************************************************************** +@@ -270,6 +273,7 @@ + { + + (void)cmd; ++ (void)vl; + if (av == NULL) + return; + printf("cmd_dump(%p)\n", priv); +@@ -293,16 +297,20 @@ + }; + + static void +-exec_file(const char *fn) ++exec_file(const char *fn, struct vtclog *vl) + { + char *buf; + +- printf("# TEST %s starting\n", fn); ++ vtc_file = fn; ++ vtc_desc = NULL; ++ vtc_log(vl, 1, "TEST %s starting", fn); + buf = read_file(fn); +- parse_string(buf, cmds, NULL); +- printf("# RESETTING after %s\n", fn); ++ parse_string(buf, cmds, NULL, vl); ++ vtc_log(vl, 1, "RESETTING after %s", fn); + reset_cmds(cmds); +- printf("# TEST %s completed\n", fn); ++ vtc_log(vl, 1, "TEST %s completed", fn); ++ vtc_file = NULL; ++ free(vtc_desc); + } + + /********************************************************************** +@@ -325,10 +333,11 @@ + { + int ch; + FILE *fok; ++ static struct vtclog *vl; + + setbuf(stdout, NULL); + setbuf(stderr, NULL); +- vl = vtc_logopen(""); ++ vl = vtc_logopen("top"); + AN(vl); + while ((ch = getopt(argc, argv, "qv")) != -1) { + switch (ch) { +@@ -350,7 +359,7 @@ + + init_sema(); + for (ch = 0; ch < argc; ch++) +- exec_file(argv[ch]); ++ exec_file(argv[ch], vl); + fok = fopen("_.ok", "w"); + if (fok != NULL) + fclose(fok); +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_client.c bin/varnishtest/vtc_client.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_client.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_client.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_client.c 3127 2008-08-26 07:51:12Z phk $ ++ * $Id: vtc_client.c 3272 2008-10-09 11:39:24Z phk $ + */ + + #include +@@ -51,7 +51,7 @@ + + char *spec; + +- const char *connect; ++ char *connect; + + pthread_t tp; + }; +@@ -98,26 +98,42 @@ + */ + + static struct client * +-client_new(char *name) ++client_new(const char *name) + { + struct client *c; + ++ AN(name); + ALLOC_OBJ(c, CLIENT_MAGIC); + AN(c); +- c->name = name; ++ REPLACE(c->name, name); + c->vl = vtc_logopen(name); + AN(c->vl); +- if (*name != 'c') { ++ if (*c->name != 'c') + vtc_log(c->vl, 0, "Client name must start with 'c'"); +- exit (1); +- } + +- c->connect = "127.0.0.1:9081"; ++ REPLACE(c->connect, "127.0.0.1:9081"); + VTAILQ_INSERT_TAIL(&clients, c, list); + return (c); + } + + /********************************************************************** ++ * Clean up client ++ */ ++ ++static void ++client_delete(struct client *c) ++{ ++ ++ CHECK_OBJ_NOTNULL(c, CLIENT_MAGIC); ++ vtc_logclose(c->vl); ++ free(c->spec); ++ free(c->name); ++ free(c->connect); ++ /* XXX: MEMLEAK (?)*/ ++ FREE_OBJ(c); ++} ++ ++/********************************************************************** + * Start the client thread + */ + +@@ -173,6 +189,7 @@ + + (void)priv; + (void)cmd; ++ (void)vl; + + if (av == NULL) { + /* Reset and free */ +@@ -180,8 +197,7 @@ + VTAILQ_REMOVE(&clients, c, list); + if (c->tp != 0) + client_wait(c); +- FREE_OBJ(c); +- /* XXX: MEMLEAK */ ++ client_delete(c); + } + return; + } +@@ -198,7 +214,7 @@ + + for (; *av != NULL; av++) { + if (!strcmp(*av, "-connect")) { +- c->connect = av[1]; ++ REPLACE(c->connect, av[1]); + av++; + continue; + } +@@ -218,6 +234,6 @@ + vtc_log(c->vl, 0, "Unknown client argument: %s", *av); + exit (1); + } +- c->spec = *av; ++ REPLACE(c->spec, *av); + } + } +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc.h bin/varnishtest/vtc.h +--- ../varnish-2.0-rc1/bin/varnishtest/vtc.h 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc.h 2008-10-09 13:49:15.000000000 +0200 +@@ -23,14 +23,14 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc.h 3244 2008-10-05 10:22:53Z phk $ ++ * $Id: vtc.h 3272 2008-10-09 11:39:24Z phk $ + */ + + struct vsb; + struct vtclog; + struct cmds; + +-#define CMD_ARGS char * const *av, void *priv, const struct cmds *cmd ++#define CMD_ARGS char * const *av, void *priv, const struct cmds *cmd, struct vtclog *vl + typedef void cmd_f(CMD_ARGS); + + struct cmds { +@@ -38,7 +38,7 @@ + cmd_f *cmd; + }; + +-void parse_string(char *buf, const struct cmds *cmd, void *priv); ++void parse_string(char *buf, const struct cmds *cmd, void *priv, struct vtclog *vl); + + cmd_f cmd_dump; + cmd_f cmd_delay; +@@ -47,13 +47,17 @@ + cmd_f cmd_varnish; + cmd_f cmd_sema; + ++extern const char *vtc_file; ++extern char *vtc_desc; ++extern int vtc_verbosity; ++ + void init_sema(void); + + void http_process(struct vtclog *vl, const char *spec, int sock, int client); + + void cmd_server_genvcl(struct vsb *vsb); + +-extern int vtc_verbosity; + struct vtclog *vtc_logopen(const char *id); ++void vtc_logclose(struct vtclog *vl); + void vtc_log(struct vtclog *vl, unsigned lvl, const char *fmt, ...); + void vtc_dump(struct vtclog *vl, unsigned lvl, const char *pfx, const char *str); +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_http.c bin/varnishtest/vtc_http.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_http.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_http.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_http.c 3207 2008-09-21 06:47:37Z phk $ ++ * $Id: vtc_http.c 3272 2008-10-09 11:39:24Z phk $ + */ + + +@@ -70,7 +70,7 @@ + * Generate a synthetic body + */ + +-static const char * ++static char * + synth_body(const char *len) + { + int i, j, k, l; +@@ -185,6 +185,7 @@ + char *rhs; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + assert(!strcmp(av[0], "expect")); + av++; +@@ -419,6 +420,7 @@ + struct http *hp; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AN(hp->client); + assert(!strcmp(av[0], "rxresp")); +@@ -445,9 +447,10 @@ + const char *proto = "HTTP/1.1"; + const char *status = "200"; + const char *msg = "Ok"; +- const char *body = NULL; ++ char *body = NULL; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AZ(hp->client); + assert(!strcmp(av[0], "txresp")); +@@ -482,7 +485,7 @@ + for(; *av != NULL; av++) { + if (!strcmp(*av, "-body")) { + AZ(body); +- body = av[1]; ++ REPLACE(body, av[1]); + av++; + } else if (!strcmp(*av, "-bodylen")) { + AZ(body); +@@ -515,6 +518,7 @@ + struct http *hp; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AZ(hp->client); + assert(!strcmp(av[0], "rxreq")); +@@ -544,6 +548,7 @@ + const char *body = NULL; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AN(hp->client); + assert(!strcmp(av[0], "txreq")); +@@ -609,6 +614,7 @@ + int i; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AN(av[1]); + AZ(av[2]); +@@ -628,6 +634,7 @@ + struct http *hp; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AN(av[1]); + AZ(av[2]); +@@ -646,6 +653,7 @@ + struct http *hp; + + (void)cmd; ++ (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AN(av[1]); + AZ(av[2]); +@@ -692,7 +700,7 @@ + q = strchr(s, '\0'); + assert(q > s); + AN(s); +- parse_string(s, http_cmds, hp); ++ parse_string(s, http_cmds, hp, vl); + vsb_delete(hp->vsb); + free(hp->rxbuf); + free(hp); +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_log.c bin/varnishtest/vtc_log.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_log.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_log.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_log.c 3248 2008-10-05 10:40:46Z phk $ ++ * $Id: vtc_log.c 3272 2008-10-09 11:39:24Z phk $ + */ + + #include +@@ -62,6 +62,15 @@ + return (vl); + } + ++void ++vtc_logclose(struct vtclog *vl) ++{ ++ ++ CHECK_OBJ_NOTNULL(vl, VTCLOG_MAGIC); ++ vsb_delete(vl->vsb); ++ FREE_OBJ(vl); ++} ++ + static const char *lead[] = { + "----", + "# ", +@@ -77,6 +86,7 @@ + vtc_log(struct vtclog *vl, unsigned lvl, const char *fmt, ...) + { + ++ CHECK_OBJ_NOTNULL(vl, VTCLOG_MAGIC); + assert(lvl < NLEAD); + if (lvl > vtc_verbosity) + return; +@@ -91,8 +101,11 @@ + AZ(vsb_overflowed(vl->vsb)); + (void)fputs(vsb_data(vl->vsb), stdout); + vsb_clear(vl->vsb); +- if (lvl == 0) ++ if (lvl == 0) { ++ printf("---- TEST FILE: %s\n", vtc_file); ++ printf("---- TEST DESCRIPTION: %s\n", vtc_desc); + exit (1); ++ } + } + + /********************************************************************** +@@ -105,6 +118,7 @@ + { + int nl = 1; + ++ CHECK_OBJ_NOTNULL(vl, VTCLOG_MAGIC); + assert(lvl < NLEAD); + if (lvl > vtc_verbosity) + return; +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_sema.c bin/varnishtest/vtc_sema.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_sema.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_sema.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_sema.c 3012 2008-07-24 12:22:35Z des $ ++ * $Id: vtc_sema.c 3272 2008-10-09 11:39:24Z phk $ + */ + + #include +@@ -42,7 +42,6 @@ + unsigned magic; + #define SEMA_MAGIC 0x29b64317 + char *name; +- struct vtclog *vl; + VTAILQ_ENTRY(sema) list; + pthread_mutex_t mtx; + pthread_cond_t cond; +@@ -59,17 +58,15 @@ + */ + + static struct sema * +-sema_new(char *name) ++sema_new(char *name, struct vtclog *vl) + { + struct sema *r; + + ALLOC_OBJ(r, SEMA_MAGIC); + AN(r); +- r->vl = vtc_logopen(name); +- AN(r->vl); + r->name = name; + if (*name != 'r') +- vtc_log(r->vl, 0, "Sema name must start with 'r'"); ++ vtc_log(vl, 0, "Sema name must start with 'r' (%s)", *name); + + AZ(pthread_mutex_init(&r->mtx, NULL)); + AZ(pthread_cond_init(&r->cond, NULL)); +@@ -84,24 +81,31 @@ + */ + + static void +-sema_sync(struct sema *r, const char *av) ++sema_sync(struct sema *r, const char *av, struct vtclog *vl) + { + unsigned u; + ++ CHECK_OBJ_NOTNULL(r, SEMA_MAGIC); + u = strtoul(av, NULL, 0); + + AZ(pthread_mutex_lock(&r->mtx)); + if (r->expected == 0) + r->expected = u; +- assert(r->expected == u); ++ if (r->expected != u) ++ vtc_log(vl, 0, ++ "Sema(%s) use error: different expectations (%u vs %u)", ++ r->name, r->expected, u); + + if (++r->waiters == r->expected) { +- vtc_log(r->vl, 4, "Wake %u", r->expected); ++ vtc_log(vl, 4, "Sema(%s) wake %u", r->name, r->expected); + AZ(pthread_cond_broadcast(&r->cond)); + r->waiters = 0; + r->expected = 0; +- } else ++ } else { ++ vtc_log(vl, 4, "Sema(%s) wait %u of %u", ++ r->name, r->waiters, r->expected); + AZ(pthread_cond_wait(&r->cond, &r->mtx)); ++ } + AZ(pthread_mutex_unlock(&r->mtx)); + } + +@@ -121,9 +125,10 @@ + AZ(pthread_mutex_lock(&sema_mtx)); + /* Reset and free */ + VTAILQ_FOREACH_SAFE(r, &semas, list, r2) { +- VTAILQ_REMOVE(&semas, r, list); +- FREE_OBJ(r); +- /* XXX: MEMLEAK */ ++ AZ(pthread_mutex_lock(&r->mtx)); ++ AZ(r->waiters); ++ AZ(r->expected); ++ AZ(pthread_mutex_unlock(&r->mtx)); + } + AZ(pthread_mutex_unlock(&sema_mtx)); + return; +@@ -137,7 +142,7 @@ + if (!strcmp(r->name, av[0])) + break; + if (r == NULL) +- r = sema_new(av[0]); ++ r = sema_new(av[0], vl); + AZ(pthread_mutex_unlock(&sema_mtx)); + av++; + +@@ -145,10 +150,10 @@ + if (!strcmp(*av, "sync")) { + av++; + AN(*av); +- sema_sync(r, *av); ++ sema_sync(r, *av, vl); + continue; + } +- vtc_log(r->vl, 0, "Unknown sema argument: %s", *av); ++ vtc_log(vl, 0, "Unknown sema argument: %s", *av); + } + } + +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_server.c bin/varnishtest/vtc_server.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_server.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_server.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_server.c 3157 2008-09-02 20:20:48Z phk $ ++ * $Id: vtc_server.c 3272 2008-10-09 11:39:24Z phk $ + */ + + +@@ -57,7 +57,7 @@ + + int depth; + int sock; +- const char *listen; ++ char *listen; + struct vss_addr **vss_addr; + char *addr; + char *port; +@@ -109,20 +109,20 @@ + */ + + static struct server * +-server_new(char *name) ++server_new(const char *name) + { + struct server *s; + ++ AN(name); + ALLOC_OBJ(s, SERVER_MAGIC); + AN(s); +- s->name = name; ++ REPLACE(s->name, name); + s->vl = vtc_logopen(name); + AN(s->vl); +- if (*name != 's') { ++ if (*s->name != 's') + vtc_log(s->vl, 0, "Server name must start with 's'"); +- exit (1); +- } +- s->listen = "127.0.0.1:9080"; ++ ++ REPLACE(s->listen, "127.0.0.1:9080"); + AZ(VSS_parse(s->listen, &s->addr, &s->port)); + s->repeat = 1; + s->depth = 1; +@@ -132,6 +132,22 @@ + } + + /********************************************************************** ++ * Clean up a server ++ */ ++ ++static void ++server_delete(struct server *s) ++{ ++ ++ CHECK_OBJ_NOTNULL(s, SERVER_MAGIC); ++ vtc_logclose(s->vl); ++ free(s->listen); ++ free(s->name); ++ /* XXX: MEMLEAK (?) (VSS ??) */ ++ FREE_OBJ(s); ++} ++ ++/********************************************************************** + * Start the server thread + */ + +@@ -211,6 +227,7 @@ + + (void)priv; + (void)cmd; ++ (void)vl; + + if (av == NULL) { + /* Reset and free */ +@@ -218,8 +235,7 @@ + VTAILQ_REMOVE(&servers, s, list); + if (s->sock >= 0) + server_wait(s); +- FREE_OBJ(s); +- /* XXX: MEMLEAK */ ++ server_delete(s); + } + return; + } +@@ -241,7 +257,7 @@ + continue; + } + if (!strcmp(*av, "-listen")) { +- s->listen = av[1]; ++ REPLACE(s->listen, av[1]); + AZ(VSS_parse(s->listen, &s->addr, &s->port)); + av++; + continue; +diff -Naur ../varnish-2.0-rc1/bin/varnishtest/vtc_varnish.c bin/varnishtest/vtc_varnish.c +--- ../varnish-2.0-rc1/bin/varnishtest/vtc_varnish.c 2008-10-08 13:18:24.000000000 +0200 ++++ bin/varnishtest/vtc_varnish.c 2008-10-09 13:49:16.000000000 +0200 +@@ -23,7 +23,7 @@ + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * +- * $Id: vtc_varnish.c 3242 2008-10-01 08:27:59Z phk $ ++ * $Id: vtc_varnish.c 3272 2008-10-09 11:39:24Z phk $ + */ + + +@@ -131,21 +131,20 @@ + */ + + static struct varnish * +-varnish_new(char *name) ++varnish_new(const char *name) + { + struct varnish *v; + ++ AN(name); + ALLOC_OBJ(v, VARNISH_MAGIC); + AN(v); +- v->name = name; ++ REPLACE(v->name, name); + v->vl = vtc_logopen(name); + AN(v->vl); + v->vl1 = vtc_logopen(name); + AN(v->vl1); +- if (*name != 'v') { ++ if (*v->name != 'v') + vtc_log(v->vl, 0, "Varnish name must start with 'v'"); +- exit (1); +- } + + v->args = ""; + v->telnet = "127.0.0.1:9001"; +@@ -156,6 +155,21 @@ + } + + /********************************************************************** ++ * Delete a varnish instance ++ */ ++ ++static void ++varnish_delete(struct varnish *v) ++{ ++ ++ CHECK_OBJ_NOTNULL(v, VARNISH_MAGIC); ++ vtc_logclose(v->vl); ++ free(v->name); ++ /* XXX: MEMLEAK */ ++ FREE_OBJ(v); ++} ++ ++/********************************************************************** + * Varnish listener + */ + +@@ -418,8 +432,8 @@ + */ + + static void +-varnish_expect(struct varnish *v, char * const *av) { +- uint64_t val, ref; ++varnish_expect(const struct varnish *v, char * const *av) { ++ uint64_t val, ref; + int good; + char *p; + int i; +@@ -428,6 +442,7 @@ + + for (i = 0; i < 10; i++, usleep(100000)) { + ++ + #define MAC_STAT(n, t, f, d) \ + if (!strcmp(av[0], #n)) { \ + val = v->stats->n; \ +@@ -435,6 +450,7 @@ + #include "stat_field.h" + #undef MAC_STAT + { ++ val = 0; + vtc_log(v->vl, 0, "stats field %s unknown", av[0]); + } + +@@ -472,6 +488,7 @@ + + (void)priv; + (void)cmd; ++ (void)vl; + + if (av == NULL) { + /* Reset and free */ +@@ -479,8 +496,7 @@ + if (v->cli_fd >= 0) + varnish_wait(v); + VTAILQ_REMOVE(&varnishes, v, list); +- FREE_OBJ(v); +- /* XXX: MEMLEAK */ ++ varnish_delete(v); + } + return; + }