]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: stream: Be sure to have a listener to increment its counters
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 24 Jan 2020 10:45:05 +0000 (11:45 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 24 Jan 2020 10:55:17 +0000 (11:55 +0100)
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

index 941e98e395f78e5ff3d3cea3542277b065468a63..38f1e4f0b4777350b2985e180594e0264b76f8b4 100644 (file)
@@ -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);