[4.1] 090ebb9 Dump more VCL info in panic, and add a general macro for checking miniobj magics.
Lasse Karstensen
lkarsten at varnish-software.com
Tue Jun 14 16:27:09 CEST 2016
commit 090ebb9c9a2c9ac64fcb046ee46bc3f12beff20f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed May 4 13:02:58 2016 +0000
Dump more VCL info in panic, and add a general macro for checking
miniobj magics.
Conflicts:
bin/varnishd/cache/cache_panic.c
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 0e0ca6f..9ae79d5 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -1123,6 +1123,14 @@ DO_DEBUG(enum debug_bits x)
VSL(SLT_Debug, (id), __VA_ARGS__); \
} while (0)
+#define PAN_CheckMagic(vsb, ptr, exp) \
+ do { \
+ if ((ptr)->magic != (exp)) \
+ VSB_printf((vsb), \
+ "MAGIC 0x%08x (Should:%s/0x%08x)\n", \
+ (ptr)->magic, #exp, exp); \
+ } while(0)
+
#ifdef VARNISHD_IS_NOT_A_VMOD
# include "cache/cache_priv.h"
#endif
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 6a55208..08a4ad1 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -115,6 +115,7 @@ pan_ws(struct vsb *vsb, const struct ws *ws)
VSB_printf(vsb, "ws = %p {\n", ws);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, ws, WS_MAGIC);
if (!(ws->id[0] & 0x20))
VSB_printf(vsb, "OVERFLOWED ");
VSB_printf(vsb, "id = \"%s\",\n", ws->id);
@@ -144,6 +145,7 @@ pan_htc(struct vsb *vsb, const struct http_conn *htc)
VSB_printf(vsb, "http_conn = %p {\n", htc);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, htc, HTTP_CONN_MAGIC);
VSB_printf(vsb, "fd = %d,\n", htc->fd);
VSB_printf(vsb, "doclose = %s,\n", sess_close_2str(htc->doclose, 0));
VSB_printf(vsb, "ws = %p,\n", htc->ws);
@@ -172,6 +174,7 @@ pan_http(struct vsb *vsb, const char *id, const struct http *h)
VSB_printf(vsb, "http[%s] = %p {\n", id, h);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, h, HTTP_MAGIC);
VSB_printf(vsb, "ws[%s] = %p,\n", h->ws ? h->ws->id : "", h->ws);
VSB_printf(vsb, "hdrs {\n");
VSB_indent(vsb, 2);
@@ -195,6 +198,7 @@ pan_objcore(struct vsb *vsb, const char *typ, const struct objcore *oc)
VSB_printf(vsb, "objcore[%s] = %p {\n", typ, oc);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, oc, OBJCORE_MAGIC);
VSB_printf(vsb, "refcnt = %d,\n", oc->refcnt);
VSB_printf(vsb, "flags = 0x%x,\n", oc->flags);
VSB_printf(vsb, "exp_flags = 0x%x,\n", oc->exp_flags);
@@ -224,6 +228,7 @@ pan_wrk(struct vsb *vsb, const struct worker *wrk)
VSB_printf(vsb, "worker = %p {\n", wrk);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, wrk, WORKER_MAGIC);
VSB_printf(vsb, "stack = {0x%jx -> 0x%jx},\n",
(uintmax_t)wrk->stack_start, (uintmax_t)wrk->stack_end);
pan_ws(vsb, wrk->aws);
@@ -271,6 +276,7 @@ pan_busyobj(struct vsb *vsb, const struct busyobj *bo)
VSB_printf(vsb, "busyobj = %p {\n", bo);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, bo, BUSYOBJ_MAGIC);
pan_ws(vsb, bo->ws);
VSB_printf(vsb, "refcnt = %u,\n", bo->refcount);
VSB_printf(vsb, "retries = %d, ", bo->retries);
@@ -324,7 +330,7 @@ pan_req(struct vsb *vsb, const struct req *req)
VSB_printf(vsb, "req = %p {\n", req);
VSB_indent(vsb, 2);
-
+ PAN_CheckMagic(vsb, req, REQ_MAGIC);
VSB_printf(vsb, "vxid = %u, ", VXID(req->vsl->wid));
switch (req->req_step) {
@@ -393,10 +399,13 @@ pan_sess(struct vsb *vsb, const struct sess *sp)
VSB_printf(vsb, "sp = %p {\n", sp);
VSB_indent(vsb, 2);
+ PAN_CheckMagic(vsb, sp, SESS_MAGIC);
VSB_printf(vsb, "fd = %d, vxid = %u,\n", sp->fd, VXID(sp->vxid));
AZ(SES_Get_client_ip(sp, &ci));
AZ(SES_Get_client_port(sp, &cp));
VSB_printf(vsb, "client = %s %s,\n", ci, cp);
+ VSB_printf(vsb, "t_open = %f,\n", sp->t_open);
+ VSB_printf(vsb, "t_idle = %f,\n", sp->t_idle);
switch (sp->sess_step) {
#define SESS_STEP(l, u) case S_STP_##u: stp = "S_STP_" #u; break;
#include "tbl/steps.h"
diff --git a/bin/varnishd/cache/cache_priv.h b/bin/varnishd/cache/cache_priv.h
index 483d041..9a7ba9f 100644
--- a/bin/varnishd/cache/cache_priv.h
+++ b/bin/varnishd/cache/cache_priv.h
@@ -69,7 +69,6 @@ void BAN_NewObjCore(struct objcore *oc);
void BAN_DestroyObj(struct objcore *oc);
int BAN_CheckObject(struct worker *, struct objcore *, struct req *);
-
/* cache_busyobj.c */
void VBO_Init(void);
diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index 8803f35..00a27b6 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -98,10 +98,17 @@ VCL_Panic(struct vsb *vsb, const struct vcl *vcl)
return;
VSB_printf(vsb, "vcl = {\n");
VSB_indent(vsb, 2);
- VSB_printf(vsb, "temp = %s\n", vcl->temp);
+ PAN_CheckMagic(vsb, vcl, VCL_MAGIC);
+ VSB_printf(vsb, "busy = %u\n", vcl->busy);
+ VSB_printf(vsb, "discard = %u,\n", vcl->discard);
+ VSB_printf(vsb, "state = %s,\n", vcl->state);
+ VSB_printf(vsb, "temp = %s,\n", vcl->temp);
+ VSB_printf(vsb, "conf = {\n");
+ VSB_indent(vsb, 2);
if (vcl->conf == NULL) {
VSB_printf(vsb, "conf = NULL\n");
} else {
+ PAN_CheckMagic(vsb, vcl->conf, VCL_CONF_MAGIC);
VSB_printf(vsb, "srcname = {\n");
VSB_indent(vsb, 2);
for (i = 0; i < vcl->conf->nsrc; ++i)
@@ -111,6 +118,8 @@ VCL_Panic(struct vsb *vsb, const struct vcl *vcl)
}
VSB_indent(vsb, -2);
VSB_printf(vsb, "},\n");
+ VSB_indent(vsb, -2);
+ VSB_printf(vsb, "},\n");
}
/*--------------------------------------------------------------------*/
More information about the varnish-commit
mailing list