From 99ac8a1aa45792fd5ef04af9c1a65181a5eabb2d Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 24 Jan 2020 11:45:05 +0100 Subject: [PATCH] BUG/MINOR: stream: Be sure to have a listener to increment its counters In process_stream(), when a client or a server abort is handled, the corresponding listener's counter is incremented. But, we must be sure to have a listener attached to the session. This bug was introduced by the commit cff0f739e51. Thanks to Fred to reporting me the bug. No need to backport this patch, except if commit cff0f739e51 is backported. --- src/stream.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/stream.c b/src/stream.c index 941e98e39..38f1e4f0b 100644 --- a/src/stream.c +++ b/src/stream.c @@ -1616,7 +1616,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) if (!(req->analysers) && !(res->analysers)) { _HA_ATOMIC_ADD(&s->be->be_counters.cli_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.cli_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->cli_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.cli_aborts, 1); @@ -1639,7 +1639,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) if (!(req->analysers) && !(res->analysers)) { _HA_ATOMIC_ADD(&s->be->be_counters.srv_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.srv_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->srv_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.srv_aborts, 1); @@ -1894,7 +1894,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) if (req->flags & CF_READ_ERROR) { _HA_ATOMIC_ADD(&s->be->be_counters.cli_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.cli_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->cli_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.cli_aborts, 1); @@ -1903,7 +1903,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else if (req->flags & CF_READ_TIMEOUT) { _HA_ATOMIC_ADD(&s->be->be_counters.cli_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.cli_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->cli_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.cli_aborts, 1); @@ -1912,7 +1912,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else if (req->flags & CF_WRITE_ERROR) { _HA_ATOMIC_ADD(&s->be->be_counters.srv_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.srv_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->srv_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.srv_aborts, 1); @@ -1921,7 +1921,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else { _HA_ATOMIC_ADD(&s->be->be_counters.srv_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.srv_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->srv_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.srv_aborts, 1); @@ -1948,7 +1948,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) if (res->flags & CF_READ_ERROR) { _HA_ATOMIC_ADD(&s->be->be_counters.srv_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.srv_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->srv_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.srv_aborts, 1); @@ -1957,7 +1957,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else if (res->flags & CF_READ_TIMEOUT) { _HA_ATOMIC_ADD(&s->be->be_counters.srv_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.srv_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->srv_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.srv_aborts, 1); @@ -1966,7 +1966,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else if (res->flags & CF_WRITE_ERROR) { _HA_ATOMIC_ADD(&s->be->be_counters.cli_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.cli_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->cli_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.cli_aborts, 1); @@ -1975,7 +1975,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) else { _HA_ATOMIC_ADD(&s->be->be_counters.cli_aborts, 1); _HA_ATOMIC_ADD(&sess->fe->fe_counters.cli_aborts, 1); - if (sess->listener->counters) + if (sess->listener && sess->listener->counters) _HA_ATOMIC_ADD(&sess->listener->counters->cli_aborts, 1); if (srv) _HA_ATOMIC_ADD(&srv->counters.cli_aborts, 1);