|
|
- From ebb2bceb34d7787453548627ed0e99c60354672b Mon Sep 17 00:00:00 2001
- From: Willy Tarreau <w@1wt.eu>
- Date: Wed, 13 May 2015 11:59:14 +0200
- Subject: [PATCH 6/8] CLEANUP: checks: simplify the loop processing of
- tcp-checks
-
- There is some unobvious redundancy between the various ways we can leave
- the loop. Some of them can be factored out. So now we leave the loop when
- we can't go further, whether it's caused by reaching the end of the rules
- or by a blocking I/O.
- (cherry picked from commit 263013d031d754c9f96de0d0cb5afcc011af6441)
- [wt: this patch is required for the next fix]
- ---
- src/checks.c | 26 ++++++++++++++------------
- 1 file changed, 14 insertions(+), 12 deletions(-)
-
- diff --git a/src/checks.c b/src/checks.c
- index a887be1..a0c42f2 100644
- --- a/src/checks.c
- +++ b/src/checks.c
- @@ -1926,8 +1926,10 @@ static void tcpcheck_main(struct connection *conn)
- __conn_data_stop_both(conn);
-
- while (1) {
- - /* we have to try to flush the output buffer before reading, at the end,
- - * or if we're about to send a string that does not fit in the remaining space.
- + /* We have to try to flush the output buffer before reading, at
- + * the end, or if we're about to send a string that does not fit
- + * in the remaining space. That explains why we break out of the
- + * loop after this control.
- */
- if (check->bo->o &&
- (&check->current_step->list == head ||
- @@ -1940,16 +1942,12 @@ static void tcpcheck_main(struct connection *conn)
- __conn_data_stop_both(conn);
- goto out_end_tcpcheck;
- }
- - goto out_need_io;
- + break;
- }
- }
-
- - /* did we reach the end ? If so, let's check that everything was sent */
- - if (&check->current_step->list == head) {
- - if (check->bo->o)
- - goto out_need_io;
- + if (&check->current_step->list == head)
- break;
- - }
-
- /* have 'next' point to the next rule or NULL if we're on the
- * last one, connect() needs this.
- @@ -2131,7 +2129,7 @@ static void tcpcheck_main(struct connection *conn)
- }
- }
- else
- - goto out_need_io;
- + break;
- }
-
- /* mark the step as started */
- @@ -2233,10 +2231,14 @@ static void tcpcheck_main(struct connection *conn)
- } /* end expect */
- } /* end loop over double chained step list */
-
- - set_server_check_status(check, HCHK_STATUS_L7OKD, "(tcp-check)");
- - goto out_end_tcpcheck;
- + /* We're waiting for some I/O to complete, we've reached the end of the
- + * rules, or both. Do what we have to do, otherwise we're done.
- + */
- + if (&check->current_step->list == head && !check->bo->o) {
- + set_server_check_status(check, HCHK_STATUS_L7OKD, "(tcp-check)");
- + goto out_end_tcpcheck;
- + }
-
- - out_need_io:
- /* warning, current_step may now point to the head */
- if (check->bo->o)
- __conn_data_want_send(conn);
- --
- 2.0.5
-
|