The response analyzer of the master CLI only handles read errors. So if
there is a write error, the session remains stuck because some outgoing data
are blocked in the channel and the response analyzer waits everything to be
sent. Because the maxconn is set to 10 for the master CLI, it may be
unresponsive if this happens to many times.
Now read and write errors, timeouts and client aborts are handled.
This patch should solve the issue #1512. It must be backported as far as
2.0.
(cherry picked from commit
e8cefacfa9dc8c7893d773acb4769de73f8323d2)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
8906dc83f4311a13c73e14ebfeda587aaf30cac4)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
c3c71f8dc4c8aa711049991a060693e36bca4e33)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
struct proxy *fe = strm_fe(s);
struct proxy *be = s->be;
- if (rep->flags & CF_READ_ERROR) {
+ if ((rep->flags & (CF_READ_ERROR|CF_READ_TIMEOUT|CF_WRITE_ERROR|CF_WRITE_TIMEOUT)) ||
+ ((rep->flags & CF_SHUTW) && (rep->to_forward || co_data(rep)))) {
pcli_reply_and_close(s, "Can't connect to the target CLI!\n");
s->req.analysers &= ~AN_REQ_WAIT_CLI;
s->res.analysers &= ~AN_RES_WAIT_CLI;