From: Christopher Faulet Date: Fri, 24 Jan 2020 10:45:05 +0000 (+0100) Subject: BUG/MINOR: stream: Be sure to have a listener to increment its counters X-Git-Tag: v2.2-dev2~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99ac8a1aa45792fd5ef04af9c1a65181a5eabb2d;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/stream.c b/src/stream.c index 941e98e395..38f1e4f0b4 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);