From ce72be87e17f50400aebb4a1af636ec9f679745f Mon Sep 17 00:00:00 2001 From: phk Date: Mon, 29 Oct 2007 09:24:16 +0000 Subject: [PATCH] Add compile-time selectable SHMlogging of WS-activity git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2182 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache_ws.c | 31 +++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache_ws.c b/varnish-cache/bin/varnishd/cache_ws.c index 684a6140..f3a22c9e 100644 --- a/varnish-cache/bin/varnishd/cache_ws.c +++ b/varnish-cache/bin/varnishd/cache_ws.c @@ -45,11 +45,22 @@ #include "cli_priv.h" #include "cache.h" +/* Enable this to get detailed logging of WS usage */ +#if 0 +# define WS_DEBUG(foo) VSL foo +#else +# define WS_DEBUG(foo) /* nothing */ +#endif + void WS_Assert(const struct ws *ws) { assert(ws != NULL); + WS_DEBUG((SLT_Debug, 0, "WS(%p = (%p %u %u %u)", + ws, ws->s, pdiff(ws->s, ws->f), + ws->r == NULL ? 0 : pdiff(ws->f, ws->r), + pdiff(ws->s, ws->e))); assert(ws->s != NULL); assert(ws->e != NULL); assert(ws->s < ws->e); @@ -65,6 +76,7 @@ void WS_Init(struct ws *ws, void *space, unsigned len) { + WS_DEBUG((SLT_Debug, 0, "WS_Init(%p, %p, %u)", ws, space, len)); assert(space != NULL); memset(ws, 0, sizeof *ws); ws->s = space; @@ -78,6 +90,7 @@ WS_Reset(struct ws *ws, char *p) { WS_Assert(ws); + WS_DEBUG((SLT_Debug, 0, "WS_Reset(%p, %p)", ws, p)); assert(ws->r == NULL); if (p == NULL) ws->f = ws->s; @@ -99,6 +112,7 @@ WS_Alloc(struct ws *ws, unsigned bytes) return(NULL); r = ws->f; ws->f += bytes; + WS_DEBUG((SLT_Debug, 0, "WS_Alloc(%p, %u) = %p", ws, bytes, r)); return (r); } @@ -112,6 +126,7 @@ WS_Dup(struct ws *ws, const char *s) p = WS_Alloc(ws, l); if (p != NULL) memcpy(p, s, l); + WS_DEBUG((SLT_Debug, 0, "WS_Dup(%p, \"%s\") = %p", ws, s, p)); return (p); } @@ -119,26 +134,33 @@ char * WS_Snapshot(struct ws *ws) { + WS_Assert(ws); assert(ws->r == NULL); + WS_DEBUG((SLT_Debug, 0, "WS_Snapshot(%p) = %p", ws, ws->f)); return (ws->f); } unsigned WS_Reserve(struct ws *ws, unsigned bytes) { + unsigned b2 = bytes; + WS_Assert(ws); assert(ws->r == NULL); if (bytes == 0) - bytes = ws->e - ws->f; - xxxassert(ws->f + bytes <= ws->e); - ws->r = ws->f + bytes; - return (ws->r - ws->f); + b2 = ws->e - ws->f; + xxxassert(ws->f + b2 <= ws->e); + ws->r = ws->f + b2; + WS_DEBUG((SLT_Debug, 0, "WS_Reserve(%p, %u/%u) = %u", + ws, b2, bytes, pdiff(ws->f, ws->r))); + return (pdiff(ws->f, ws->r)); } void WS_Release(struct ws *ws, unsigned bytes) { WS_Assert(ws); + WS_DEBUG((SLT_Debug, 0, "WS_Release(%p, %u)", ws, bytes)); assert(ws->r != NULL); assert(ws->f + bytes <= ws->r); ws->f += bytes; @@ -149,6 +171,7 @@ void WS_ReleaseP(struct ws *ws, char *ptr) { WS_Assert(ws); + WS_DEBUG((SLT_Debug, 0, "WS_ReleaseP(%p, %p)", ws, ptr)); assert(ws->r != NULL); assert(ptr >= ws->f); assert(ptr <= ws->r); -- 2.39.5