From ac7108e2a18218fa9a661f60feefbbda572bd414 Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 20 Jul 2008 10:45:09 +0000 Subject: [PATCH] Report thread name and thread session in panic messages. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2972 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache.h | 3 ++- varnish-cache/bin/varnishd/cache_acceptor.c | 2 +- .../bin/varnishd/cache_acceptor_epoll.c | 2 +- .../bin/varnishd/cache_acceptor_kqueue.c | 2 +- .../bin/varnishd/cache_acceptor_poll.c | 2 +- .../bin/varnishd/cache_backend_poll.c | 4 ++-- varnish-cache/bin/varnishd/cache_expire.c | 2 +- varnish-cache/bin/varnishd/cache_fetch.c | 1 + varnish-cache/bin/varnishd/cache_main.c | 21 ++++++++++++------- varnish-cache/bin/varnishd/cache_panic.c | 18 +++++++++++----- varnish-cache/bin/varnishd/cache_pool.c | 6 +++--- 11 files changed, 40 insertions(+), 23 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index b72f36be..689f61f8 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -510,7 +510,8 @@ int HTC_Complete(struct http_conn *htc); #undef HTTPH /* cache_main.c */ -void THR_Name(const char *name); +void THR_SetName(const char *name); +const char* THR_GetName(void); void THR_SetSession(const struct sess *sp); const struct sess * THR_GetSession(void); diff --git a/varnish-cache/bin/varnishd/cache_acceptor.c b/varnish-cache/bin/varnishd/cache_acceptor.c index 65632cfe..63289499 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor.c +++ b/varnish-cache/bin/varnishd/cache_acceptor.c @@ -162,7 +162,7 @@ vca_acct(void *arg) unsigned u; double now; - THR_Name("cache-acceptor"); + THR_SetName("cache-acceptor"); (void)arg; /* Set up the poll argument */ diff --git a/varnish-cache/bin/varnishd/cache_acceptor_epoll.c b/varnish-cache/bin/varnishd/cache_acceptor_epoll.c index 8652d723..0f323e23 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor_epoll.c +++ b/varnish-cache/bin/varnishd/cache_acceptor_epoll.c @@ -76,7 +76,7 @@ vca_main(void *arg) struct sess *sp, *sp2; int i; - THR_Name("cache-epoll"); + THR_SetName("cache-epoll"); (void)arg; epfd = epoll_create(16); diff --git a/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c b/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c index aaaab3df..eb5cb67f 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c +++ b/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c @@ -152,7 +152,7 @@ vca_kqueue_main(void *arg) double deadline; struct sess *sp; - THR_Name("cache-kqueue"); + THR_SetName("cache-kqueue"); (void)arg; kq = kqueue(); diff --git a/varnish-cache/bin/varnishd/cache_acceptor_poll.c b/varnish-cache/bin/varnishd/cache_acceptor_poll.c index 171179d2..195123e9 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor_poll.c +++ b/varnish-cache/bin/varnishd/cache_acceptor_poll.c @@ -111,7 +111,7 @@ vca_main(void *arg) double deadline; int i, fd; - THR_Name("cache-poll"); + THR_SetName("cache-poll"); (void)arg; vca_poll(vca_pipes[0]); diff --git a/varnish-cache/bin/varnishd/cache_backend_poll.c b/varnish-cache/bin/varnishd/cache_backend_poll.c index 72ad98e3..e5d72ae4 100644 --- a/varnish-cache/bin/varnishd/cache_backend_poll.c +++ b/varnish-cache/bin/varnishd/cache_backend_poll.c @@ -68,7 +68,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv) (void)w; CAST_OBJ_NOTNULL(vt, priv, VBP_TARGET_MAGIC); - THR_Name("backend poll"); + THR_SetName("backend poll"); while (!vt->stop) { printf("Poke backend %s\n", vt->backend->vcl_name); @@ -76,7 +76,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv) } vt->backend->probe = NULL; FREE_OBJ(vt); - THR_Name("cache-worker"); + THR_SetName("cache-worker"); } void diff --git a/varnish-cache/bin/varnishd/cache_expire.c b/varnish-cache/bin/varnishd/cache_expire.c index 33478915..46f558c7 100644 --- a/varnish-cache/bin/varnishd/cache_expire.c +++ b/varnish-cache/bin/varnishd/cache_expire.c @@ -263,7 +263,7 @@ exp_timer(void *arg) struct sess *sp; unsigned char logbuf[1024]; /* XXX size ? */ - THR_Name("cache-timeout"); + THR_SetName("cache-timeout"); (void)arg; sp = SES_New(NULL, 0); diff --git a/varnish-cache/bin/varnishd/cache_fetch.c b/varnish-cache/bin/varnishd/cache_fetch.c index e098dcf7..443f8afd 100644 --- a/varnish-cache/bin/varnishd/cache_fetch.c +++ b/varnish-cache/bin/varnishd/cache_fetch.c @@ -317,6 +317,7 @@ Fetch(struct sess *sp) struct http_conn htc[1]; int i; +AZ(sp); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); diff --git a/varnish-cache/bin/varnishd/cache_main.c b/varnish-cache/bin/varnishd/cache_main.c index 64405405..4c093a12 100644 --- a/varnish-cache/bin/varnishd/cache_main.c +++ b/varnish-cache/bin/varnishd/cache_main.c @@ -65,19 +65,25 @@ THR_GetSession(void) * Name threads if our pthreads implementation supports it. */ +static pthread_key_t name_key; + void -THR_Name(const char *name) +THR_SetName(const char *name) { + + AZ(pthread_setspecific(name_key, name)); #ifdef HAVE_PTHREAD_SET_NAME_NP pthread_set_name_np(pthread_self(), name); -#else - /* - * XXX: we could stash it somewhere else (TLS ?) - */ - (void)name; #endif } +const char * +THR_GetName(void) +{ + + return (pthread_getspecific(name_key)); +} + /*-------------------------------------------------------------------- * XXX: Think more about which order we start things */ @@ -91,8 +97,9 @@ child_main(void) printf("Child starts\n"); AZ(pthread_key_create(&sp_key, NULL)); + AZ(pthread_key_create(&name_key, NULL)); - THR_Name("cache-main"); + THR_SetName("cache-main"); PAN_Init(); CLI_Init(); diff --git a/varnish-cache/bin/varnishd/cache_panic.c b/varnish-cache/bin/varnishd/cache_panic.c index ee630527..f773b30e 100644 --- a/varnish-cache/bin/varnishd/cache_panic.c +++ b/varnish-cache/bin/varnishd/cache_panic.c @@ -248,22 +248,30 @@ pan_ic(const char *func, const char *file, int line, const char *cond, int err, { int l; char *p; + const char *q; + const struct sess *sp; if (xxx) { vsb_printf(vsp, "Missing errorhandling code in %s(), %s line %d:\n" - " Condition(%s) not true.\n", + " Condition(%s) not true.", func, file, line, cond); } else { vsb_printf(vsp, "Assert error in %s(), %s line %d:\n" - " Condition(%s) not true.\n", + " Condition(%s) not true.", func, file, line, cond); } if (err) - vsb_printf(vsp, - " errno = %d (%s)\n", err, strerror(err)); - + vsb_printf(vsp, " errno = %d (%s)", err, strerror(err)); + + q = THR_GetName(); + if (q != NULL) + vsb_printf(vsp, " thread = (%s)", q); + sp = THR_GetSession(); + if (sp != NULL) + vsb_printf(vsp, " sess = (%p)", sp); + vsb_printf(vsp, "\n"); VSL_Panic(&l, &p); if (l < vsb_len(vsp)) l = vsb_len(vsp); diff --git a/varnish-cache/bin/varnishd/cache_pool.c b/varnish-cache/bin/varnishd/cache_pool.c index 3b21ae8b..5de2848a 100644 --- a/varnish-cache/bin/varnishd/cache_pool.c +++ b/varnish-cache/bin/varnishd/cache_pool.c @@ -208,7 +208,7 @@ wrk_thread(void *priv) unsigned char wlog[8192]; /* XXX: size */ struct workreq *wrq; - THR_Name("cache-worker"); + THR_SetName("cache-worker"); w = &ww; CAST_OBJ_NOTNULL(qp, priv, WQ_MAGIC); memset(w, 0, sizeof *w); @@ -441,7 +441,7 @@ wrk_herdtimer_thread(void *priv) double t_idle; struct varnish_stats vsm, *vs; - THR_Name("wrk_herdtimer"); + THR_SetName("wrk_herdtimer"); memset(&vsm, 0, sizeof vsm); vs = &vsm; @@ -534,7 +534,7 @@ wrk_herder_thread(void *priv) { unsigned u, w; - THR_Name("wrk_herder"); + THR_SetName("wrk_herder"); (void)priv; while (1) { for (u = 0 ; u < nwq; u++) { -- 2.39.5