Commit 4c56bf21 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Add compile-time selectable SHMlogging of WS-activity


git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2182 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 309e4910
...@@ -45,11 +45,22 @@ ...@@ -45,11 +45,22 @@
#include "cli_priv.h" #include "cli_priv.h"
#include "cache.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 void
WS_Assert(const struct ws *ws) WS_Assert(const struct ws *ws)
{ {
assert(ws != NULL); 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->s != NULL);
assert(ws->e != NULL); assert(ws->e != NULL);
assert(ws->s < ws->e); assert(ws->s < ws->e);
...@@ -65,6 +76,7 @@ void ...@@ -65,6 +76,7 @@ void
WS_Init(struct ws *ws, void *space, unsigned len) 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); assert(space != NULL);
memset(ws, 0, sizeof *ws); memset(ws, 0, sizeof *ws);
ws->s = space; ws->s = space;
...@@ -78,6 +90,7 @@ WS_Reset(struct ws *ws, char *p) ...@@ -78,6 +90,7 @@ WS_Reset(struct ws *ws, char *p)
{ {
WS_Assert(ws); WS_Assert(ws);
WS_DEBUG((SLT_Debug, 0, "WS_Reset(%p, %p)", ws, p));
assert(ws->r == NULL); assert(ws->r == NULL);
if (p == NULL) if (p == NULL)
ws->f = ws->s; ws->f = ws->s;
...@@ -99,6 +112,7 @@ WS_Alloc(struct ws *ws, unsigned bytes) ...@@ -99,6 +112,7 @@ WS_Alloc(struct ws *ws, unsigned bytes)
return(NULL); return(NULL);
r = ws->f; r = ws->f;
ws->f += bytes; ws->f += bytes;
WS_DEBUG((SLT_Debug, 0, "WS_Alloc(%p, %u) = %p", ws, bytes, r));
return (r); return (r);
} }
...@@ -112,6 +126,7 @@ WS_Dup(struct ws *ws, const char *s) ...@@ -112,6 +126,7 @@ WS_Dup(struct ws *ws, const char *s)
p = WS_Alloc(ws, l); p = WS_Alloc(ws, l);
if (p != NULL) if (p != NULL)
memcpy(p, s, l); memcpy(p, s, l);
WS_DEBUG((SLT_Debug, 0, "WS_Dup(%p, \"%s\") = %p", ws, s, p));
return (p); return (p);
} }
...@@ -119,26 +134,33 @@ char * ...@@ -119,26 +134,33 @@ char *
WS_Snapshot(struct ws *ws) WS_Snapshot(struct ws *ws)
{ {
WS_Assert(ws);
assert(ws->r == NULL); assert(ws->r == NULL);
WS_DEBUG((SLT_Debug, 0, "WS_Snapshot(%p) = %p", ws, ws->f));
return (ws->f); return (ws->f);
} }
unsigned unsigned
WS_Reserve(struct ws *ws, unsigned bytes) WS_Reserve(struct ws *ws, unsigned bytes)
{ {
unsigned b2 = bytes;
WS_Assert(ws); WS_Assert(ws);
assert(ws->r == NULL); assert(ws->r == NULL);
if (bytes == 0) if (bytes == 0)
bytes = ws->e - ws->f; b2 = ws->e - ws->f;
xxxassert(ws->f + bytes <= ws->e); xxxassert(ws->f + b2 <= ws->e);
ws->r = ws->f + bytes; ws->r = ws->f + b2;
return (ws->r - ws->f); 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 void
WS_Release(struct ws *ws, unsigned bytes) WS_Release(struct ws *ws, unsigned bytes)
{ {
WS_Assert(ws); WS_Assert(ws);
WS_DEBUG((SLT_Debug, 0, "WS_Release(%p, %u)", ws, bytes));
assert(ws->r != NULL); assert(ws->r != NULL);
assert(ws->f + bytes <= ws->r); assert(ws->f + bytes <= ws->r);
ws->f += bytes; ws->f += bytes;
...@@ -149,6 +171,7 @@ void ...@@ -149,6 +171,7 @@ void
WS_ReleaseP(struct ws *ws, char *ptr) WS_ReleaseP(struct ws *ws, char *ptr)
{ {
WS_Assert(ws); WS_Assert(ws);
WS_DEBUG((SLT_Debug, 0, "WS_ReleaseP(%p, %p)", ws, ptr));
assert(ws->r != NULL); assert(ws->r != NULL);
assert(ptr >= ws->f); assert(ptr >= ws->f);
assert(ptr <= ws->r); assert(ptr <= ws->r);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment