From: Olivier Houchard Date: Fri, 10 May 2019 15:48:28 +0000 (+0200) Subject: BUG/MEDIUM: streams: Make sur SI_FL_L7_RETRY is set before attempting a retry. X-Git-Tag: v2.0-dev3~55 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad26d8d8207a5c839ab5fa133b1b65527f1bdbea;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: streams: Make sur SI_FL_L7_RETRY is set before attempting a retry. In a few cases, we'd just check if the backend is configured to do retries, and not if it's still allowed on the stream_interface. The SI_FL_L7_RETRY flag could have been removed because we failed to allocate a buffer, or because the request was too big to fit in a single buffer, so make sure it's there before attempting a retry. --- diff --git a/src/proto_htx.c b/src/proto_htx.c index b99b9cf9b3..e7341c1ae1 100644 --- a/src/proto_htx.c +++ b/src/proto_htx.c @@ -1528,6 +1528,7 @@ int htx_wait_for_response(struct stream *s, struct channel *rep, int an_bit) */ if (conn->err_code == CO_ER_SSL_EARLY_FAILED) { if ((s->be->retry_type & PR_RE_EARLY_ERROR) && + (si_b->flags & SI_FL_L7_RETRY) && do_l7_retry(s, si_b) == 0) return 0; txn->status = 425; @@ -1817,6 +1818,7 @@ int htx_wait_for_response(struct stream *s, struct channel *rep, int an_bit) health_adjust(__objt_server(s->target), HANA_STATUS_HTTP_HDRRSP); } if ((s->be->retry_type & PR_RE_JUNK_REQUEST) && + (si_b->flags & SI_FL_L7_RETRY) && do_l7_retry(s, si_b) == 0) return 0; txn->status = 502;