Commit 4667881d authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Report thread name and thread session in panic messages.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2972 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 63a34452
...@@ -510,7 +510,8 @@ int HTC_Complete(struct http_conn *htc); ...@@ -510,7 +510,8 @@ int HTC_Complete(struct http_conn *htc);
#undef HTTPH #undef HTTPH
/* cache_main.c */ /* 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); void THR_SetSession(const struct sess *sp);
const struct sess * THR_GetSession(void); const struct sess * THR_GetSession(void);
......
...@@ -162,7 +162,7 @@ vca_acct(void *arg) ...@@ -162,7 +162,7 @@ vca_acct(void *arg)
unsigned u; unsigned u;
double now; double now;
THR_Name("cache-acceptor"); THR_SetName("cache-acceptor");
(void)arg; (void)arg;
/* Set up the poll argument */ /* Set up the poll argument */
......
...@@ -76,7 +76,7 @@ vca_main(void *arg) ...@@ -76,7 +76,7 @@ vca_main(void *arg)
struct sess *sp, *sp2; struct sess *sp, *sp2;
int i; int i;
THR_Name("cache-epoll"); THR_SetName("cache-epoll");
(void)arg; (void)arg;
epfd = epoll_create(16); epfd = epoll_create(16);
......
...@@ -152,7 +152,7 @@ vca_kqueue_main(void *arg) ...@@ -152,7 +152,7 @@ vca_kqueue_main(void *arg)
double deadline; double deadline;
struct sess *sp; struct sess *sp;
THR_Name("cache-kqueue"); THR_SetName("cache-kqueue");
(void)arg; (void)arg;
kq = kqueue(); kq = kqueue();
......
...@@ -111,7 +111,7 @@ vca_main(void *arg) ...@@ -111,7 +111,7 @@ vca_main(void *arg)
double deadline; double deadline;
int i, fd; int i, fd;
THR_Name("cache-poll"); THR_SetName("cache-poll");
(void)arg; (void)arg;
vca_poll(vca_pipes[0]); vca_poll(vca_pipes[0]);
......
...@@ -68,7 +68,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv) ...@@ -68,7 +68,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv)
(void)w; (void)w;
CAST_OBJ_NOTNULL(vt, priv, VBP_TARGET_MAGIC); CAST_OBJ_NOTNULL(vt, priv, VBP_TARGET_MAGIC);
THR_Name("backend poll"); THR_SetName("backend poll");
while (!vt->stop) { while (!vt->stop) {
printf("Poke backend %s\n", vt->backend->vcl_name); printf("Poke backend %s\n", vt->backend->vcl_name);
...@@ -76,7 +76,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv) ...@@ -76,7 +76,7 @@ vbp_wrk_poll_backend(struct worker *w, void *priv)
} }
vt->backend->probe = NULL; vt->backend->probe = NULL;
FREE_OBJ(vt); FREE_OBJ(vt);
THR_Name("cache-worker"); THR_SetName("cache-worker");
} }
void void
......
...@@ -263,7 +263,7 @@ exp_timer(void *arg) ...@@ -263,7 +263,7 @@ exp_timer(void *arg)
struct sess *sp; struct sess *sp;
unsigned char logbuf[1024]; /* XXX size ? */ unsigned char logbuf[1024]; /* XXX size ? */
THR_Name("cache-timeout"); THR_SetName("cache-timeout");
(void)arg; (void)arg;
sp = SES_New(NULL, 0); sp = SES_New(NULL, 0);
......
...@@ -317,6 +317,7 @@ Fetch(struct sess *sp) ...@@ -317,6 +317,7 @@ Fetch(struct sess *sp)
struct http_conn htc[1]; struct http_conn htc[1];
int i; int i;
AZ(sp);
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
......
...@@ -65,19 +65,25 @@ THR_GetSession(void) ...@@ -65,19 +65,25 @@ THR_GetSession(void)
* Name threads if our pthreads implementation supports it. * Name threads if our pthreads implementation supports it.
*/ */
static pthread_key_t name_key;
void void
THR_Name(const char *name) THR_SetName(const char *name)
{ {
AZ(pthread_setspecific(name_key, name));
#ifdef HAVE_PTHREAD_SET_NAME_NP #ifdef HAVE_PTHREAD_SET_NAME_NP
pthread_set_name_np(pthread_self(), name); pthread_set_name_np(pthread_self(), name);
#else
/*
* XXX: we could stash it somewhere else (TLS ?)
*/
(void)name;
#endif #endif
} }
const char *
THR_GetName(void)
{
return (pthread_getspecific(name_key));
}
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
* XXX: Think more about which order we start things * XXX: Think more about which order we start things
*/ */
...@@ -91,8 +97,9 @@ child_main(void) ...@@ -91,8 +97,9 @@ child_main(void)
printf("Child starts\n"); printf("Child starts\n");
AZ(pthread_key_create(&sp_key, NULL)); AZ(pthread_key_create(&sp_key, NULL));
AZ(pthread_key_create(&name_key, NULL));
THR_Name("cache-main"); THR_SetName("cache-main");
PAN_Init(); PAN_Init();
CLI_Init(); CLI_Init();
......
...@@ -248,22 +248,30 @@ pan_ic(const char *func, const char *file, int line, const char *cond, int err, ...@@ -248,22 +248,30 @@ pan_ic(const char *func, const char *file, int line, const char *cond, int err,
{ {
int l; int l;
char *p; char *p;
const char *q;
const struct sess *sp;
if (xxx) { if (xxx) {
vsb_printf(vsp, vsb_printf(vsp,
"Missing errorhandling code in %s(), %s line %d:\n" "Missing errorhandling code in %s(), %s line %d:\n"
" Condition(%s) not true.\n", " Condition(%s) not true.",
func, file, line, cond); func, file, line, cond);
} else { } else {
vsb_printf(vsp, vsb_printf(vsp,
"Assert error in %s(), %s line %d:\n" "Assert error in %s(), %s line %d:\n"
" Condition(%s) not true.\n", " Condition(%s) not true.",
func, file, line, cond); func, file, line, cond);
} }
if (err) if (err)
vsb_printf(vsp, vsb_printf(vsp, " errno = %d (%s)", err, strerror(err));
" errno = %d (%s)\n", 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); VSL_Panic(&l, &p);
if (l < vsb_len(vsp)) if (l < vsb_len(vsp))
l = vsb_len(vsp); l = vsb_len(vsp);
......
...@@ -208,7 +208,7 @@ wrk_thread(void *priv) ...@@ -208,7 +208,7 @@ wrk_thread(void *priv)
unsigned char wlog[8192]; /* XXX: size */ unsigned char wlog[8192]; /* XXX: size */
struct workreq *wrq; struct workreq *wrq;
THR_Name("cache-worker"); THR_SetName("cache-worker");
w = &ww; w = &ww;
CAST_OBJ_NOTNULL(qp, priv, WQ_MAGIC); CAST_OBJ_NOTNULL(qp, priv, WQ_MAGIC);
memset(w, 0, sizeof *w); memset(w, 0, sizeof *w);
...@@ -441,7 +441,7 @@ wrk_herdtimer_thread(void *priv) ...@@ -441,7 +441,7 @@ wrk_herdtimer_thread(void *priv)
double t_idle; double t_idle;
struct varnish_stats vsm, *vs; struct varnish_stats vsm, *vs;
THR_Name("wrk_herdtimer"); THR_SetName("wrk_herdtimer");
memset(&vsm, 0, sizeof vsm); memset(&vsm, 0, sizeof vsm);
vs = &vsm; vs = &vsm;
...@@ -534,7 +534,7 @@ wrk_herder_thread(void *priv) ...@@ -534,7 +534,7 @@ wrk_herder_thread(void *priv)
{ {
unsigned u, w; unsigned u, w;
THR_Name("wrk_herder"); THR_SetName("wrk_herder");
(void)priv; (void)priv;
while (1) { while (1) {
for (u = 0 ; u < nwq; u++) { for (u = 0 ; u < nwq; u++) {
......
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